module Numeric.LAPACK.ComfortArray.Float where
import qualified Numeric.LAPACK.FFI.Float as FFI
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 Data.Array.Comfort.Storable.Mutable (IOArray)
import Data.Array.Comfort.Storable (Array)
import Foreign.Storable (peek)
import Foreign.Ptr (Ptr, FunPtr)
import Foreign.C.String (castCCharToChar)
import Foreign.C.Types (CInt)
import Control.Monad.Trans.Cont (evalContT)
import Control.Monad.IO.Class (liftIO)
import Control.Applicative (pure, (<*>))
bbcsd ::
Char ->
Char ->
Char ->
Char ->
Char ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
bbcsd :: Char
-> Char
-> Char
-> Char
-> Char
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
bbcsd Char
jobu1 Char
jobu2 Char
jobv1t Char
jobv2t Char
trans Int
m IOArray ZeroInt Float
theta IOArray ZeroInt Float
phi IOArray (ZeroInt, ZeroInt) Float
u1 IOArray (ZeroInt, ZeroInt) Float
u2 IOArray (ZeroInt, ZeroInt) Float
v1t IOArray (ZeroInt, ZeroInt) Float
v2t Int
lwork = do
let thetaDim0 :: Int
thetaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
theta
let phiDim0 :: Int
phiDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
phi
let (Int
u1Dim0,Int
u1Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
u1
let (Int
u2Dim0,Int
u2Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
u2
let (Int
v1tDim0,Int
v1tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
v1t
let (Int
v2tDim0,Int
v2tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
v2t
let q :: Int
q = Int
thetaDim0
let p :: Int
p = Int
u1Dim0
let ldu1 :: Int
ldu1 = Int
u1Dim1
let ldu2 :: Int
ldu2 = Int
u2Dim1
let ldv1t :: Int
ldv1t = Int
v1tDim1
let ldv2t :: Int
ldv2t = Int
v2tDim1
String -> Bool -> IO ()
Call.assert String
"bbcsd: q-1 == phiDim0" (Int
qInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
phiDim0)
String -> Bool -> IO ()
Call.assert String
"bbcsd: m-p == u2Dim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
p Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
u2Dim0)
String -> Bool -> IO ()
Call.assert String
"bbcsd: q == v1tDim0" (Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
v1tDim0)
String -> Bool -> IO ()
Call.assert String
"bbcsd: m-q == v2tDim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
v2tDim0)
IOArray ZeroInt Float
b11d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
IOArray ZeroInt Float
b11e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
qInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
b12d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
IOArray ZeroInt Float
b12e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
qInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
b21d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
IOArray ZeroInt Float
b21e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
qInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
b22d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
IOArray ZeroInt Float
b22e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
qInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobu1Ptr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu1
Ptr CChar
jobu2Ptr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu2
Ptr CChar
jobv1tPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv1t
Ptr CChar
jobv2tPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv2t
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
pPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr CInt
qPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
q
Ptr Float
thetaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
theta
Ptr Float
phiPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
phi
Ptr Float
u1Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u1
Ptr CInt
ldu1Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu1
Ptr Float
u2Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u2
Ptr CInt
ldu2Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu2
Ptr Float
v1tPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v1t
Ptr CInt
ldv1tPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv1t
Ptr Float
v2tPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v2t
Ptr CInt
ldv2tPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv2t
Ptr Float
b11dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b11d
Ptr Float
b11ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b11e
Ptr Float
b12dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b12d
Ptr Float
b12ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b12e
Ptr Float
b21dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b21d
Ptr Float
b21ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b21e
Ptr Float
b22dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b22d
Ptr Float
b22ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b22e
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.bbcsd Ptr CChar
jobu1Ptr Ptr CChar
jobu2Ptr Ptr CChar
jobv1tPtr Ptr CChar
jobv2tPtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
qPtr Ptr Float
thetaPtr Ptr Float
phiPtr Ptr Float
u1Ptr Ptr CInt
ldu1Ptr Ptr Float
u2Ptr Ptr CInt
ldu2Ptr Ptr Float
v1tPtr Ptr CInt
ldv1tPtr Ptr Float
v2tPtr Ptr CInt
ldv2tPtr Ptr Float
b11dPtr Ptr Float
b11ePtr Ptr Float
b12dPtr Ptr Float
b12ePtr Ptr Float
b21dPtr Ptr Float
b21ePtr Ptr Float
b22dPtr Ptr Float
b22ePtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b11d
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b11e
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b12d
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b12e
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b21d
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b21e
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b22d
IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b22e
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
bdsdc ::
Char ->
Char ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Int ->
Int ->
Int ->
Int ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt Float, Array ZeroInt CInt, Int)
bdsdc :: Char
-> Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
bdsdc Char
uplo Char
compq IOArray ZeroInt Float
d IOArray ZeroInt Float
e Int
ldu Int
ldvt Int
ldq Int
ldiq Int
lwork = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"bdsdc: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
IOArray (ZeroInt, ZeroInt) Float
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldu
IOArray (ZeroInt, ZeroInt) Float
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvt
IOArray ZeroInt Float
q <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
ldq
IOArray ZeroInt CInt
iq <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
ldiq
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
compqPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compq
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
uPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr Float
vtPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vt
Ptr CInt
ldvtPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
Ptr Float
qPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
q
Ptr CInt
iqPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iq
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.bdsdc Ptr CChar
uploPtr Ptr CChar
compqPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr Float
vtPtr Ptr CInt
ldvtPtr Ptr Float
qPtr Ptr CInt
iqPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
u
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vt
IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
q
IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
iq
IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
bdsqr ::
Char ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
bdsqr :: Char
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
bdsqr Char
uplo Int
nru IOArray ZeroInt Float
d IOArray ZeroInt Float
e IOArray (ZeroInt, ZeroInt) Float
vt IOArray (ZeroInt, ZeroInt) Float
u IOArray (ZeroInt, ZeroInt) Float
c = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let (Int
vtDim0,Int
vtDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
vt
let (Int
uDim0,Int
uDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
u
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let n :: Int
n = Int
dDim0
let ncvt :: Int
ncvt = Int
vtDim0
let ldvt :: Int
ldvt = Int
vtDim1
let ldu :: Int
ldu = Int
uDim1
let ncc :: Int
ncc = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
String -> Bool -> IO ()
Call.assert String
"bdsqr: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"bdsqr: n == uDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
uDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
ncvtPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ncvt
Ptr CInt
nruPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nru
Ptr CInt
nccPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ncc
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
vtPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vt
Ptr CInt
ldvtPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
Ptr Float
uPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u
Ptr CInt
lduPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.bdsqr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
ncvtPtr Ptr CInt
nruPtr Ptr CInt
nccPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
vtPtr Ptr CInt
ldvtPtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
disna ::
Char ->
Int ->
Int ->
Array ZeroInt Float ->
Int ->
IO (Array ZeroInt Float, Int)
disna :: Char
-> Int
-> Int
-> Array ZeroInt Float
-> Int
-> IO (Array ZeroInt Float, Int)
disna Char
job Int
m Int
n Array ZeroInt Float
d Int
sepSize = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let _dSize :: Int
_dSize = Int
dDim0
IOArray ZeroInt Float
sep <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
sepSize
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
sepPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
sep
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.disna Ptr CChar
jobPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
sepPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
sep
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gbbrd ::
Char ->
Int ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)
gbbrd :: Char
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
gbbrd Char
vect Int
m Int
kl Int
ku IOArray (ZeroInt, ZeroInt) Float
ab Int
ldq Int
ldpt IOArray (ZeroInt, ZeroInt) Float
c = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let ncc :: Int
ncc = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n]Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray (ZeroInt, ZeroInt) Float
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
m Int
ldq
IOArray (ZeroInt, ZeroInt) Float
pt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldpt
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*[Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
m,Int
n])
ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
vectPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
vect
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nccPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ncc
Ptr CInt
klPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
ptPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
pt
Ptr CInt
ldptPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldpt
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gbbrd Ptr CChar
vectPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nccPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
ptPtr Ptr CInt
ldptPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
q
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
pt
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gbcon ::
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
Float ->
IO (Float, Int)
gbcon :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Float
-> IO (Float, Int)
gbcon Char
norm Int
kl Int
ku Array (ZeroInt, ZeroInt) Float
ab Array ZeroInt CInt
ipiv Float
anorm = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
String -> Bool -> IO ()
Call.assert String
"gbcon: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbcon Ptr CChar
normPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gbequ ::
Int ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)
gbequ :: Int
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
gbequ Int
m Int
kl Int
ku Array (ZeroInt, ZeroInt) Float
ab = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Float
r <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Float
c <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
rPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
r
Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
Ptr Float
rowcndPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
colcndPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
amaxPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gbequ Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
rPtr Ptr Float
cPtr Ptr Float
rowcndPtr Ptr Float
colcndPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
r
IO
(Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
c
IO
(Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Float
-> IO
(Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rowcndPtr
IO
(Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Float
-> IO
(Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
colcndPtr
IO
(Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Float
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gbequb ::
Int ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)
gbequb :: Int
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
gbequb Int
m Int
kl Int
ku Array (ZeroInt, ZeroInt) Float
ab = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Float
r <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Float
c <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
rPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
r
Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
Ptr Float
rowcndPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
colcndPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
amaxPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gbequb Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
rPtr Ptr Float
cPtr Ptr Float
rowcndPtr Ptr Float
colcndPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
r
IO
(Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
c
IO
(Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Float
-> IO
(Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rowcndPtr
IO
(Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Float
-> IO
(Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
colcndPtr
IO
(Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Float
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gbrfs ::
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
gbrfs :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
gbrfs Char
trans Int
kl Int
ku Array (ZeroInt, ZeroInt) Float
ab Array (ZeroInt, ZeroInt) Float
afb Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
x = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let (Int
afbDim0,Int
afbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
afb
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let ldafb :: Int
ldafb = Int
afbDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldx :: Int
ldx = Int
xDim1
String -> Bool -> IO ()
Call.assert String
"gbrfs: n == afbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afbDim0)
String -> Bool -> IO ()
Call.assert String
"gbrfs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
String -> Bool -> IO ()
Call.assert String
"gbrfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
afbPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
afb
Ptr CInt
ldafbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldafb
Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbrfs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
afbPtr Ptr CInt
ldafbPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gbsv ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt CInt, Int)
gbsv :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt CInt, Int)
gbsv Int
kl Int
ku IOArray (ZeroInt, ZeroInt) Float
ab IOArray (ZeroInt, ZeroInt) Float
b = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr CInt
nrhsPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbsv Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt) -> IO (Int -> (Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ipiv
IO (Int -> (Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gbsvx ::
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt CInt ->
Char ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Char, Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)
gbsvx :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt CInt
-> Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
gbsvx Char
fact Char
trans Int
kl Int
ku IOArray (ZeroInt, ZeroInt) Float
ab IOArray (ZeroInt, ZeroInt) Float
afb IOArray ZeroInt CInt
ipiv Char
equed IOArray ZeroInt Float
r IOArray ZeroInt Float
c IOArray (ZeroInt, ZeroInt) Float
b Int
ldx = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let (Int
afbDim0,Int
afbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
afb
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
ipiv
let rDim0 :: Int
rDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
r
let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
c
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let ldafb :: Int
ldafb = Int
afbDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"gbsvx: n == afbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afbDim0)
String -> Bool -> IO ()
Call.assert String
"gbsvx: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
String -> Bool -> IO ()
Call.assert String
"gbsvx: n == rDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
rDim0)
String -> Bool -> IO ()
Call.assert String
"gbsvx: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
IOArray (ZeroInt, ZeroInt) Float
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
transPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
afbPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
afb
Ptr CInt
ldafbPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldafb
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr CChar
equedPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
Ptr Float
rPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
r
Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
rcondPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CChar
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbsvx Ptr CChar
factPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
afbPtr Ptr CInt
ldafbPtr Ptr CInt
ipivPtr Ptr CChar
equedPtr Ptr Float
rPtr Ptr Float
cPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Char
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CChar -> Char) -> IO CChar -> IO Char
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CChar -> Char
castCCharToChar (Ptr CChar -> IO CChar
forall a. Storable a => Ptr a -> IO a
peek Ptr CChar
equedPtr)
IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
x
IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gbtf2 ::
Int ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt CInt, Int)
gbtf2 :: Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt CInt, Int)
gbtf2 Int
m Int
kl Int
ku IOArray (ZeroInt, ZeroInt) Float
ab = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbtf2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt) -> IO (Int -> (Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ipiv
IO (Int -> (Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gbtrf ::
Int ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt CInt, Int)
gbtrf :: Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt CInt, Int)
gbtrf Int
m Int
kl Int
ku IOArray (ZeroInt, ZeroInt) Float
ab = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbtrf Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt) -> IO (Int -> (Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ipiv
IO (Int -> (Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gbtrs ::
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
gbtrs :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
gbtrs Char
trans Int
kl Int
ku Array (ZeroInt, ZeroInt) Float
ab Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) Float
b = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"gbtrs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbtrs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gebak ::
Char ->
Char ->
Int ->
Int ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
gebak :: Char
-> Char
-> Int
-> Int
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
gebak Char
job Char
side Int
ilo Int
ihi Array ZeroInt Float
scale IOArray (ZeroInt, ZeroInt) Float
v = do
let scaleDim0 :: Int
scaleDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
scale
let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
v
let n :: Int
n = Int
scaleDim0
let m :: Int
m = Int
vDim0
let ldv :: Int
ldv = Int
vDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr Float
scalePtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
scale
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr Float
vPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v
Ptr CInt
ldvPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gebak Ptr CChar
jobPtr Ptr CChar
sidePtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
scalePtr Ptr CInt
mPtr Ptr Float
vPtr Ptr CInt
ldvPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gebal ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int, Int, Array ZeroInt Float, Int)
gebal :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Int, Int, Array ZeroInt Float, Int)
gebal Char
job IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
scale <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Int, Array ZeroInt Float, Int)
IO
(Int, Int, Array ZeroInt Float, Int)
-> IO (Int, Int, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Int, Array ZeroInt Float, Int)
IO
(Int, Int, Array ZeroInt Float, Int)
-> IO (Int, Int, Array ZeroInt Float, Int))
-> ContT
(Int, Int, Array ZeroInt Float, Int)
IO
(Int, Int, Array ZeroInt Float, Int)
-> IO (Int, Int, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char -> FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CInt
nPtr <- Int -> FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
iloPtr <- FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
ihiPtr <- FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
scalePtr <- IOArray ZeroInt Float
-> FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
scale
Ptr CInt
infoPtr <- FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Int, Int, Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Int, Int, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int, Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Int, Int, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gebal Ptr CChar
jobPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
scalePtr Ptr CInt
infoPtr
IO (Int, Int, Array ZeroInt Float, Int)
-> ContT
(Int, Int, Array ZeroInt Float, Int)
IO
(Int, Int, Array ZeroInt Float, Int)
forall a. IO a -> ContT (Int, Int, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int, Array ZeroInt Float, Int)
-> ContT
(Int, Int, Array ZeroInt Float, Int)
IO
(Int, Int, Array ZeroInt Float, Int))
-> IO (Int, Int, Array ZeroInt Float, Int)
-> ContT
(Int, Int, Array ZeroInt Float, Int)
IO
(Int, Int, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Int
-> Array ZeroInt Float
-> Int
-> (Int, Int, Array ZeroInt Float, Int))
-> IO
(Int
-> Int
-> Array ZeroInt Float
-> Int
-> (Int, Int, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Int
-> Int
-> Array ZeroInt Float
-> Int
-> (Int, Int, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Int
-> Array ZeroInt Float
-> Int
-> (Int, Int, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
iloPtr)
IO
(Int
-> Array ZeroInt Float
-> Int
-> (Int, Int, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Int -> (Int, Int, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ihiPtr)
IO
(Array ZeroInt Float
-> Int -> (Int, Int, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Int, Int, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
scale
IO (Int -> (Int, Int, Array ZeroInt Float, Int))
-> IO Int -> IO (Int, Int, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gebd2 ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
gebd2 :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
gebd2 Int
m IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n]Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
tauq <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
taup <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
m,Int
n])
ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
tauqPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tauq
Ptr Float
taupPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
taup
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gebd2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
tauqPtr Ptr Float
taupPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tauq
IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
taup
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gebrd ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
gebrd :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
gebrd Int
m IOArray (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n]Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
tauq <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
taup <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
tauqPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tauq
Ptr Float
taupPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
taup
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gebrd Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
tauqPtr Ptr Float
taupPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tauq
IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
taup
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gecon ::
Char ->
Array (ZeroInt,ZeroInt) Float ->
Float ->
IO (Float, Int)
gecon :: Char -> Array (ZeroInt, ZeroInt) Float -> Float -> IO (Float, Int)
gecon Char
norm Array (ZeroInt, ZeroInt) Float
a Float
anorm = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gecon Ptr CChar
normPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
geequ ::
Int ->
Array (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)
geequ :: Int
-> Array (ZeroInt, ZeroInt) Float
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
geequ Int
m Array (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
r <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Float
c <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
rPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
r
Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
Ptr Float
rowcndPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
colcndPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
amaxPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.geequ Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
rPtr Ptr Float
cPtr Ptr Float
rowcndPtr Ptr Float
colcndPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
r
IO
(Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
c
IO
(Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Float
-> IO
(Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rowcndPtr
IO
(Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Float
-> IO
(Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
colcndPtr
IO
(Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Float
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
geequb ::
Int ->
Array (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)
geequb :: Int
-> Array (ZeroInt, ZeroInt) Float
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
geequb Int
m Array (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
r <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Float
c <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
rPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
r
Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
Ptr Float
rowcndPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
colcndPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
amaxPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.geequb Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
rPtr Ptr Float
cPtr Ptr Float
rowcndPtr Ptr Float
colcndPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
r
IO
(Array ZeroInt Float
-> Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
c
IO
(Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Float
-> IO
(Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rowcndPtr
IO
(Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Float
-> IO
(Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
colcndPtr
IO
(Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Float
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gees ::
Char ->
Char ->
FunPtr (Ptr Float -> Ptr Float -> IO Bool) ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IO (Int, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)
gees :: Char
-> Char
-> FunPtr (Ptr Float -> Ptr Float -> IO Bool)
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
gees Char
jobvs Char
sort FunPtr (Ptr Float -> Ptr Float -> IO Bool)
select IOArray (ZeroInt, ZeroInt) Float
a Int
ldvs Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
wr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
wi <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
vs <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt Bool
bwork <- Int -> IO (IOArray ZeroInt Bool)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobvsPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvs
Ptr CChar
sortPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
FunPtr (Ptr Float -> Ptr Float -> IO Bool)
selectPtr <- FunPtr (Ptr Float -> Ptr Float -> IO Bool)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(FunPtr (Ptr Float -> Ptr Float -> IO Bool))
forall a.
a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr Float -> Ptr Float -> IO Bool)
select
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
sdimPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wrPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wr
Ptr Float
wiPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wi
Ptr Float
vsPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vs
Ptr CInt
ldvsPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvs
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Bool)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Bool
bwork
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr Float -> Ptr Float -> IO Bool)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.gees Ptr CChar
jobvsPtr Ptr CChar
sortPtr FunPtr (Ptr Float -> Ptr Float -> IO Bool)
selectPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
sdimPtr Ptr Float
wrPtr Ptr Float
wiPtr Ptr Float
vsPtr Ptr CInt
ldvsPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
sdimPtr)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wr
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wi
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vs
IO
(Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
geesx ::
Char ->
Char ->
FunPtr (Ptr Float -> Ptr Float -> IO Bool) ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
IO (Int, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Float, Float, Int)
geesx :: Char
-> Char
-> FunPtr (Ptr Float -> Ptr Float -> IO Bool)
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
geesx Char
jobvs Char
sort FunPtr (Ptr Float -> Ptr Float -> IO Bool)
select Char
sense IOArray (ZeroInt, ZeroInt) Float
a Int
ldvs Int
lwork Int
liwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
wr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
wi <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
vs <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
IOArray ZeroInt Bool
bwork <- Int -> IO (IOArray ZeroInt Bool)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobvsPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvs
Ptr CChar
sortPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
FunPtr (Ptr Float -> Ptr Float -> IO Bool)
selectPtr <- FunPtr (Ptr Float -> Ptr Float -> IO Bool)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
(FunPtr (Ptr Float -> Ptr Float -> IO Bool))
forall a.
a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr Float -> Ptr Float -> IO Bool)
select
Ptr CChar
sensePtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sense
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
sdimPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wrPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wr
Ptr Float
wiPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wi
Ptr Float
vsPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vs
Ptr CInt
ldvsPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvs
Ptr Float
rcondePtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
rcondvPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr Bool)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Bool
bwork
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr Float -> Ptr Float -> IO Bool)
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.geesx Ptr CChar
jobvsPtr Ptr CChar
sortPtr FunPtr (Ptr Float -> Ptr Float -> IO Bool)
selectPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
sdimPtr Ptr Float
wrPtr Ptr Float
wiPtr Ptr Float
vsPtr Ptr CInt
ldvsPtr Ptr Float
rcondePtr Ptr Float
rcondvPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
sdimPtr)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wr
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wi
IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vs
IO
(Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO Float
-> IO
(Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondePtr
IO
(Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO Float
-> IO
(Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondvPtr
IO
(Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
geev ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)
geev :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
geev Char
jobvl Char
jobvr IOArray (ZeroInt, ZeroInt) Float
a Int
ldvl Int
ldvr Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
wr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
wi <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
IOArray (ZeroInt, ZeroInt) Float
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvr
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobvlPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvl
Ptr CChar
jobvrPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvr
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
wrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wr
Ptr Float
wiPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wi
Ptr Float
vlPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vl
Ptr CInt
ldvlPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr Float
vrPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vr
Ptr CInt
ldvrPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geev Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
wrPtr Ptr Float
wiPtr Ptr Float
vlPtr Ptr CInt
ldvlPtr Ptr Float
vrPtr Ptr CInt
ldvrPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wr
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wi
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vl
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vr
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
geevx ::
Char ->
Char ->
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)
geevx :: Char
-> Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
geevx Char
balanc Char
jobvl Char
jobvr Char
sense IOArray (ZeroInt, ZeroInt) Float
a Int
ldvl Int
ldvr Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
wr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
wi <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
IOArray (ZeroInt, ZeroInt) Float
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvr
IOArray ZeroInt Float
scale <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
rconde <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
rcondv <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2)
ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
balancPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
balanc
Ptr CChar
jobvlPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvl
Ptr CChar
jobvrPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvr
Ptr CChar
sensePtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sense
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
wrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wr
Ptr Float
wiPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wi
Ptr Float
vlPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vl
Ptr CInt
ldvlPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr Float
vrPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vr
Ptr CInt
ldvrPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr CInt
iloPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
ihiPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
scalePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
scale
Ptr Float
abnrmPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
rcondePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rconde
Ptr Float
rcondvPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rcondv
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geevx Ptr CChar
balancPtr Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
wrPtr Ptr Float
wiPtr Ptr Float
vlPtr Ptr CInt
ldvlPtr Ptr Float
vrPtr Ptr CInt
ldvrPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
scalePtr Ptr Float
abnrmPtr Ptr Float
rcondePtr Ptr Float
rcondvPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wr
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wi
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vl
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vr
IO
(Int
-> Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Int
-> IO
(Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
iloPtr)
IO
(Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ihiPtr)
IO
(Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
scale
IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
abnrmPtr
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rconde
IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rcondv
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gehd2 ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Int)
gehd2 :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Int)
gehd2 Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gehd2 Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gehrd ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Int)
gehrd :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Int)
gehrd Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gehrd Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gejsv ::
Char ->
Char ->
Char ->
Char ->
Char ->
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)
gejsv :: Char
-> Char
-> Char
-> Char
-> Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
gejsv Char
joba Char
jobu Char
jobv Char
jobr Char
jobt Char
jobp Int
m IOArray (ZeroInt, ZeroInt) Float
a Int
ldu Int
ldv Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
sva <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldu
IOArray (ZeroInt, ZeroInt) Float
v <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldv
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobaPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
joba
Ptr CChar
jobuPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu
Ptr CChar
jobvPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv
Ptr CChar
jobrPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobr
Ptr CChar
jobtPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobt
Ptr CChar
jobpPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobp
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
svaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
sva
Ptr Float
uPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr Float
vPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v
Ptr CInt
ldvPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gejsv Ptr CChar
jobaPtr Ptr CChar
jobuPtr Ptr CChar
jobvPtr Ptr CChar
jobrPtr Ptr CChar
jobtPtr Ptr CChar
jobpPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
svaPtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr Float
vPtr Ptr CInt
ldvPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
sva
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
u
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
v
IO
(Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gelq2 ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Int)
gelq2 :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Int)
gelq2 Int
m IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gelq2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gelqf ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Int)
gelqf :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Int)
gelqf Int
m IOArray (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gelqf Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gels ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
gels :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
gels Char
trans Int
m IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gels Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gelsd ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Float ->
Int ->
Int ->
IO (Array ZeroInt Float, Int, Int)
gelsd :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Float
-> Int
-> Int
-> IO (Array ZeroInt Float, Int, Int)
gelsd Int
m IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Float
rcond Int
lwork Int
liwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
ContT
(Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Int, Int))
-> ContT
(Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
rcondPtr <- Float -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rcond
Ptr CInt
rankPtr <- FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gelsd Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
sPtr Ptr Float
rcondPtr Ptr CInt
rankPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Int -> Int -> (Array ZeroInt Float, Int, Int))
-> IO
(Array ZeroInt Float
-> Int -> Int -> (Array ZeroInt Float, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Int -> Int -> (Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> Int -> (Array ZeroInt Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
IO (Int -> Int -> (Array ZeroInt Float, Int, Int))
-> IO Int -> IO (Int -> (Array ZeroInt Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
rankPtr)
IO (Int -> (Array ZeroInt Float, Int, Int))
-> IO Int -> IO (Array ZeroInt Float, Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gelss ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Float ->
Int ->
IO (Array ZeroInt Float, Int, Int)
gelss :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Float
-> Int
-> IO (Array ZeroInt Float, Int, Int)
gelss Int
m IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Float
rcond Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT
(Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Int, Int))
-> ContT
(Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
rcondPtr <- Float -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rcond
Ptr CInt
rankPtr <- FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gelss Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
sPtr Ptr Float
rcondPtr Ptr CInt
rankPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Int -> Int -> (Array ZeroInt Float, Int, Int))
-> IO
(Array ZeroInt Float
-> Int -> Int -> (Array ZeroInt Float, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Int -> Int -> (Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> Int -> (Array ZeroInt Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
IO (Int -> Int -> (Array ZeroInt Float, Int, Int))
-> IO Int -> IO (Int -> (Array ZeroInt Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
rankPtr)
IO (Int -> (Array ZeroInt Float, Int, Int))
-> IO Int -> IO (Array ZeroInt Float, Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gelsy ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt CInt ->
Float ->
Int ->
IO (Int, Int)
gelsy :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt CInt
-> Float
-> Int
-> IO (Int, Int)
gelsy Int
m IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b IOArray ZeroInt CInt
jpvt Float
rcond Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let jpvtDim0 :: Int
jpvtDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
jpvt
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"gelsy: n == jpvtDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
jpvtDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int) IO (Int, Int) -> IO (Int, Int))
-> ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
jpvtPtr <- IOArray ZeroInt CInt -> FortranIO (Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpvt
Ptr Float
rcondPtr <- Float -> FortranIO (Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rcond
Ptr CInt
rankPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Int, Int) IO ()
forall a. IO a -> ContT (Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int) IO ())
-> IO () -> ContT (Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gelsy Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
jpvtPtr Ptr Float
rcondPtr Ptr CInt
rankPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
forall a. IO a -> ContT (Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int) -> ContT (Int, Int) IO (Int, Int))
-> IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ (Int -> Int -> (Int, Int)) -> IO (Int -> Int -> (Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Int -> Int -> (Int, Int)) -> IO Int -> IO (Int -> (Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
rankPtr)
IO (Int -> (Int, Int)) -> IO Int -> IO (Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
geql2 ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Int)
geql2 :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Int)
geql2 Int
m IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.geql2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
geqlf ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Int)
geqlf :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Int)
geqlf Int
m IOArray (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geqlf Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
geqp3 ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt CInt ->
Int ->
IO (Array ZeroInt Float, Int)
geqp3 :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt CInt
-> Int
-> IO (Array ZeroInt Float, Int)
geqp3 Int
m IOArray (ZeroInt, ZeroInt) Float
a IOArray ZeroInt CInt
jpvt Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let jpvtDim0 :: Int
jpvtDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
jpvt
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"geqp3: n == jpvtDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
jpvtDim0)
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
jpvtPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpvt
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geqp3 Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
jpvtPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
geqr2 ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Int)
geqr2 :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Int)
geqr2 Int
m IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.geqr2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
geqr2p ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Int)
geqr2p :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Int)
geqr2p Int
m IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.geqr2p Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
geqrf ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Int)
geqrf :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Int)
geqrf Int
m IOArray (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geqrf Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
geqrfp ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Int)
geqrfp :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Int)
geqrfp Int
m IOArray (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geqrfp Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gerfs ::
Char ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
gerfs :: Char
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
gerfs Char
trans Array (ZeroInt, ZeroInt) Float
a Array (ZeroInt, ZeroInt) Float
af Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
x = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let (Int
afDim0,Int
afDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
af
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldaf :: Int
ldaf = Int
afDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldx :: Int
ldx = Int
xDim1
String -> Bool -> IO ()
Call.assert String
"gerfs: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
String -> Bool -> IO ()
Call.assert String
"gerfs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
String -> Bool -> IO ()
Call.assert String
"gerfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
afPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
af
Ptr CInt
ldafPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gerfs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gerq2 ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Int)
gerq2 :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Int)
gerq2 Int
m IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gerq2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gerqf ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Int)
gerqf :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Int)
gerqf Int
m IOArray (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gerqf Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gesc2 ::
Array (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt Float ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
IO (Float)
gesc2 :: Array (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> IO Float
gesc2 Array (ZeroInt, ZeroInt) Float
a IOArray ZeroInt Float
rhs Array ZeroInt CInt
ipiv Array ZeroInt CInt
jpiv = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let rhsDim0 :: Int
rhsDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
rhs
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let jpivDim0 :: Int
jpivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
jpiv
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"gesc2: n == rhsDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
rhsDim0)
String -> Bool -> IO ()
Call.assert String
"gesc2: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
String -> Bool -> IO ()
Call.assert String
"gesc2: n == jpivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
jpivDim0)
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
rhsPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rhs
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Float (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr CInt
jpivPtr <- Array ZeroInt CInt -> FortranIO Float (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
jpiv
Ptr Float
scalePtr <- FortranIO Float (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Float IO ()
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Float IO ()) -> IO () -> ContT Float IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> IO ()
FFI.gesc2 Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
rhsPtr Ptr CInt
ipivPtr Ptr CInt
jpivPtr Ptr Float
scalePtr
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
gesdd ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)
gesdd :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
gesdd Char
jobz Int
m IOArray (ZeroInt, ZeroInt) Float
a Int
ucol Int
ldu Int
ldvt Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray (ZeroInt, ZeroInt) Float
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
ucol Int
ldu
IOArray (ZeroInt, ZeroInt) Float
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvt
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*[Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
uPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr Float
vtPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vt
Ptr CInt
ldvtPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gesdd Ptr CChar
jobzPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
sPtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr Float
vtPtr Ptr CInt
ldvtPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
u
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vt
IO
(Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gesv ::
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt CInt, Int)
gesv :: IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float -> IO (Array ZeroInt CInt, Int)
gesv IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gesv Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt) -> IO (Int -> (Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ipiv
IO (Int -> (Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gesvd ::
Char ->
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)
gesvd :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
gesvd Char
jobu Char
jobvt Int
m IOArray (ZeroInt, ZeroInt) Float
a Int
ucol Int
ldu Int
ldvt Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray (ZeroInt, ZeroInt) Float
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
ucol Int
ldu
IOArray (ZeroInt, ZeroInt) Float
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvt
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobuPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu
Ptr CChar
jobvtPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvt
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
uPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr Float
vtPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vt
Ptr CInt
ldvtPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gesvd Ptr CChar
jobuPtr Ptr CChar
jobvtPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
sPtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr Float
vtPtr Ptr CInt
ldvtPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
u
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vt
IO
(Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gesvj ::
Char ->
Char ->
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt Float ->
IO (Array ZeroInt Float, Int)
gesvj :: Char
-> Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt Float
-> IO (Array ZeroInt Float, Int)
gesvj Char
joba Char
jobu Char
jobv Int
m IOArray (ZeroInt, ZeroInt) Float
a Int
mv IOArray (ZeroInt, ZeroInt) Float
v IOArray ZeroInt Float
work = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
v
let workDim0 :: Int
workDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
work
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldv :: Int
ldv = Int
vDim1
let lwork :: Int
lwork = Int
workDim0
String -> Bool -> IO ()
Call.assert String
"gesvj: n == vDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vDim0)
IOArray ZeroInt Float
sva <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobaPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
joba
Ptr CChar
jobuPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu
Ptr CChar
jobvPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
svaPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
sva
Ptr CInt
mvPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mv
Ptr Float
vPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v
Ptr CInt
ldvPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gesvj Ptr CChar
jobaPtr Ptr CChar
jobuPtr Ptr CChar
jobvPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
svaPtr Ptr CInt
mvPtr Ptr Float
vPtr Ptr CInt
ldvPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
sva
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gesvx ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt CInt ->
Char ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Char, Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)
gesvx :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt CInt
-> Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
gesvx Char
fact Char
trans IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
af IOArray ZeroInt CInt
ipiv Char
equed IOArray ZeroInt Float
r IOArray ZeroInt Float
c IOArray (ZeroInt, ZeroInt) Float
b Int
ldx = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
afDim0,Int
afDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
af
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
ipiv
let rDim0 :: Int
rDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
r
let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
c
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldaf :: Int
ldaf = Int
afDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"gesvx: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
String -> Bool -> IO ()
Call.assert String
"gesvx: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
String -> Bool -> IO ()
Call.assert String
"gesvx: n == rDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
rDim0)
String -> Bool -> IO ()
Call.assert String
"gesvx: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
IOArray (ZeroInt, ZeroInt) Float
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
transPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
afPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
af
Ptr CInt
ldafPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr CChar
equedPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
Ptr Float
rPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
r
Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
rcondPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CChar
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gesvx Ptr CChar
factPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr CChar
equedPtr Ptr Float
rPtr Ptr Float
cPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Char
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CChar -> Char) -> IO CChar -> IO Char
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CChar -> Char
castCCharToChar (Ptr CChar -> IO CChar
forall a. Storable a => Ptr a -> IO a
peek Ptr CChar
equedPtr)
IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
x
IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
getc2 ::
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
getc2 :: IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
getc2 IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
jpiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> ContT
(Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr CInt
jpivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpiv
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Array ZeroInt CInt, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt CInt, Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt CInt, Array ZeroInt CInt, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt CInt, Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getc2 Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr CInt
jpivPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a.
IO a -> ContT (Array ZeroInt CInt, Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Int -> (Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ipiv
IO
(Array ZeroInt CInt
-> Int -> (Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO (Int -> (Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
jpiv
IO (Int -> (Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
getf2 ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt CInt, Int)
getf2 :: Int
-> IOArray (ZeroInt, ZeroInt) Float -> IO (Array ZeroInt CInt, Int)
getf2 Int
m IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getf2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt) -> IO (Int -> (Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ipiv
IO (Int -> (Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
getrf ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt CInt, Int)
getrf :: Int
-> IOArray (ZeroInt, ZeroInt) Float -> IO (Array ZeroInt CInt, Int)
getrf Int
m IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getrf Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt) -> IO (Int -> (Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ipiv
IO (Int -> (Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
getri ::
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
Int ->
IO (Int)
getri :: IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt -> Int -> IO Int
getri IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt CInt
ipiv Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"getri: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getri Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
getrs ::
Char ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
getrs :: Char
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
getrs Char
trans Array (ZeroInt, ZeroInt) Float
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) Float
b = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"getrs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getrs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ggbak ::
Char ->
Char ->
Int ->
Int ->
Array ZeroInt Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
ggbak :: Char
-> Char
-> Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
ggbak Char
job Char
side Int
ilo Int
ihi Array ZeroInt Float
lscale Array ZeroInt Float
rscale IOArray (ZeroInt, ZeroInt) Float
v = do
let lscaleDim0 :: Int
lscaleDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
lscale
let rscaleDim0 :: Int
rscaleDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
rscale
let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
v
let n :: Int
n = Int
lscaleDim0
let m :: Int
m = Int
vDim0
let ldv :: Int
ldv = Int
vDim1
String -> Bool -> IO ()
Call.assert String
"ggbak: n == rscaleDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
rscaleDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr Float
lscalePtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
lscale
Ptr Float
rscalePtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
rscale
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr Float
vPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v
Ptr CInt
ldvPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggbak Ptr CChar
jobPtr Ptr CChar
sidePtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
lscalePtr Ptr Float
rscalePtr Ptr CInt
mPtr Ptr Float
vPtr Ptr CInt
ldvPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ggbal ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
ggbal :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
ggbal Char
job IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"ggbal: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray ZeroInt Float
lscale <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
rscale <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
iloPtr <- FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
ihiPtr <- FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
lscalePtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
lscale
Ptr Float
rscalePtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rscale
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ggbal Ptr CChar
jobPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
lscalePtr Ptr Float
rscalePtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
iloPtr)
IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ihiPtr)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
lscale
IO
(Array ZeroInt Float
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int -> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rscale
IO
(Int -> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gges ::
Char ->
Char ->
Char ->
FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool) ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
IO (Int, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)
gges :: Char
-> Char
-> Char
-> FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool)
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
gges Char
jobvsl Char
jobvsr Char
sort FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool)
selctg IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Int
ldvsl Int
ldvsr Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"gges: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray ZeroInt Float
alphar <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
alphai <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
beta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
vsl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsl
IOArray (ZeroInt, ZeroInt) Float
vsr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsr
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt Bool
bwork <- Int -> IO (IOArray ZeroInt Bool)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobvslPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvsl
Ptr CChar
jobvsrPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvsr
Ptr CChar
sortPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool)
selctgPtr <- FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool))
forall a.
a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool)
selctg
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
sdimPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
alpharPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alphar
Ptr Float
alphaiPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alphai
Ptr Float
betaPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
beta
Ptr Float
vslPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vsl
Ptr CInt
ldvslPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsl
Ptr Float
vsrPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vsr
Ptr CInt
ldvsrPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Bool)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Bool
bwork
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.gges Ptr CChar
jobvslPtr Ptr CChar
jobvsrPtr Ptr CChar
sortPtr FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool)
selctgPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
sdimPtr Ptr Float
alpharPtr Ptr Float
alphaiPtr Ptr Float
betaPtr Ptr Float
vslPtr Ptr CInt
ldvslPtr Ptr Float
vsrPtr Ptr CInt
ldvsrPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
sdimPtr)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alphar
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alphai
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
beta
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vsl
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vsr
IO
(Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ggesx ::
Char ->
Char ->
Char ->
FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool) ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
Int ->
IO (Int, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt Float, Array ZeroInt Float, Int)
ggesx :: Char
-> Char
-> Char
-> FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool)
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> Int
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
ggesx Char
jobvsl Char
jobvsr Char
sort FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool)
selctg Char
sense IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Int
ldvsl Int
ldvsr Int
lwork Int
liwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"ggesx: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray ZeroInt Float
alphar <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
alphai <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
beta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
vsl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsl
IOArray (ZeroInt, ZeroInt) Float
vsr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsr
IOArray ZeroInt Float
rconde <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
IOArray ZeroInt Float
rcondv <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
IOArray ZeroInt Bool
bwork <- Int -> IO (IOArray ZeroInt Bool)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobvslPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvsl
Ptr CChar
jobvsrPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvsr
Ptr CChar
sortPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool)
selctgPtr <- FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool))
forall a.
a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool)
selctg
Ptr CChar
sensePtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sense
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
sdimPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
alpharPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alphar
Ptr Float
alphaiPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alphai
Ptr Float
betaPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
beta
Ptr Float
vslPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vsl
Ptr CInt
ldvslPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsl
Ptr Float
vsrPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vsr
Ptr CInt
ldvsrPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsr
Ptr Float
rcondePtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rconde
Ptr Float
rcondvPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rcondv
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Bool)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Bool
bwork
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool)
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.ggesx Ptr CChar
jobvslPtr Ptr CChar
jobvsrPtr Ptr CChar
sortPtr FunPtr (Ptr Float -> Ptr Float -> Ptr Float -> IO Bool)
selctgPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
sdimPtr Ptr Float
alpharPtr Ptr Float
alphaiPtr Ptr Float
betaPtr Ptr Float
vslPtr Ptr CInt
ldvslPtr Ptr Float
vsrPtr Ptr CInt
ldvsrPtr Ptr Float
rcondePtr Ptr Float
rcondvPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
sdimPtr)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alphar
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alphai
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
beta
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vsl
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vsr
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rconde
IO
(Array ZeroInt Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rcondv
IO
(Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ggev ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)
ggev :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
ggev Char
jobvl Char
jobvr IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Int
ldvl Int
ldvr Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"ggev: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray ZeroInt Float
alphar <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
alphai <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
beta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
IOArray (ZeroInt, ZeroInt) Float
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvr
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobvlPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvl
Ptr CChar
jobvrPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvr
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
alpharPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alphar
Ptr Float
alphaiPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alphai
Ptr Float
betaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
beta
Ptr Float
vlPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vl
Ptr CInt
ldvlPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr Float
vrPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vr
Ptr CInt
ldvrPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggev Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
alpharPtr Ptr Float
alphaiPtr Ptr Float
betaPtr Ptr Float
vlPtr Ptr CInt
ldvlPtr Ptr Float
vrPtr Ptr CInt
ldvrPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alphar
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alphai
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
beta
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vl
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vr
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ggevx ::
Char ->
Char ->
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)
ggevx :: Char
-> Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
ggevx Char
balanc Char
jobvl Char
jobvr Char
sense IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Int
ldvl Int
ldvr Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"ggevx: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray ZeroInt Float
alphar <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
alphai <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
beta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
IOArray (ZeroInt, ZeroInt) Float
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvr
IOArray ZeroInt Float
lscale <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
rscale <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
rconde <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
rcondv <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6)
IOArray ZeroInt Bool
bwork <- Int -> IO (IOArray ZeroInt Bool)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
balancPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
balanc
Ptr CChar
jobvlPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvl
Ptr CChar
jobvrPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvr
Ptr CChar
sensePtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sense
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
alpharPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alphar
Ptr Float
alphaiPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alphai
Ptr Float
betaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
beta
Ptr Float
vlPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vl
Ptr CInt
ldvlPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr Float
vrPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vr
Ptr CInt
ldvrPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr CInt
iloPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
ihiPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
lscalePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
lscale
Ptr Float
rscalePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rscale
Ptr Float
abnrmPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
bbnrmPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
rcondePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rconde
Ptr Float
rcondvPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rcondv
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Bool)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Bool
bwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.ggevx Ptr CChar
balancPtr Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
alpharPtr Ptr Float
alphaiPtr Ptr Float
betaPtr Ptr Float
vlPtr Ptr CInt
ldvlPtr Ptr Float
vrPtr Ptr CInt
ldvrPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
lscalePtr Ptr Float
rscalePtr Ptr Float
abnrmPtr Ptr Float
bbnrmPtr Ptr Float
rcondePtr Ptr Float
rcondvPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alphar
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alphai
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
beta
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vl
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vr
IO
(Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
iloPtr)
IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ihiPtr)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
lscale
IO
(Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rscale
IO
(Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
abnrmPtr
IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
bbnrmPtr
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rconde
IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rcondv
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ggglm ::
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt Float ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
ggglm :: IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt Float
-> Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
ggglm IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b IOArray ZeroInt Float
d Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let m :: Int
m = Int
aDim0
let lda :: Int
lda = Int
aDim1
let p :: Int
p = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let n :: Int
n = Int
dDim0
IOArray ZeroInt Float
x <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Float
y <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
p
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
pPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
xPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
Ptr Float
yPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
y
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggglm Ptr CInt
nPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
dPtr Ptr Float
xPtr Ptr Float
yPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
x
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
y
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gghrd ::
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
gghrd :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
gghrd Char
compq Char
compz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
q IOArray (ZeroInt, ZeroInt) Float
z = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
let ldq :: Int
ldq = Int
qDim1
let ldz :: Int
ldz = Int
zDim1
String -> Bool -> IO ()
Call.assert String
"gghrd: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
String -> Bool -> IO ()
Call.assert String
"gghrd: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
String -> Bool -> IO ()
Call.assert String
"gghrd: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
compqPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compq
Ptr CChar
compzPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gghrd Ptr CChar
compqPtr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gglse ::
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Int ->
IO (Array ZeroInt Float, Int)
gglse :: IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Int
-> IO (Array ZeroInt Float, Int)
gglse IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b IOArray ZeroInt Float
c IOArray ZeroInt Float
d Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
c
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
let m :: Int
m = Int
cDim0
let p :: Int
p = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"gglse: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray ZeroInt Float
x <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
pPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
xPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gglse Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
pPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
cPtr Ptr Float
dPtr Ptr Float
xPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
x
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ggqrf ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
ggqrf :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
ggqrf Int
n IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let m :: Int
m = Int
aDim0
let lda :: Int
lda = Int
aDim1
let p :: Int
p = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
IOArray ZeroInt Float
taua <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
n,Int
m])
IOArray ZeroInt Float
taub <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
n,Int
p])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
pPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
taua
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
taubPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
taub
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggqrf Ptr CInt
nPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
taubPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
taua
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
taub
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ggrqf ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
ggrqf :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
ggrqf Int
m Int
p IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"ggrqf: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray ZeroInt Float
taua <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
taub <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
p,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
pPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
taua
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
taubPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
taub
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggrqf Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
taubPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
taua
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
taub
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gsvj0 ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Float ->
Float ->
Float ->
Int ->
Int ->
IO (Int)
gsvj0 :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Float
-> Int
-> Int
-> IO Int
gsvj0 Char
jobv Int
m IOArray (ZeroInt, ZeroInt) Float
a IOArray ZeroInt Float
d IOArray ZeroInt Float
sva Int
mv IOArray (ZeroInt, ZeroInt) Float
v Float
eps Float
sfmin Float
tol Int
nsweep Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let svaDim0 :: Int
svaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
sva
let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
v
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldv :: Int
ldv = Int
vDim1
String -> Bool -> IO ()
Call.assert String
"gsvj0: n == dDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
String -> Bool -> IO ()
Call.assert String
"gsvj0: n == svaDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
svaDim0)
String -> Bool -> IO ()
Call.assert String
"gsvj0: n == vDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobvPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
svaPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
sva
Ptr CInt
mvPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mv
Ptr Float
vPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v
Ptr CInt
ldvPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr Float
epsPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
eps
Ptr Float
sfminPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sfmin
Ptr Float
tolPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tol
Ptr CInt
nsweepPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nsweep
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gsvj0 Ptr CChar
jobvPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
dPtr Ptr Float
svaPtr Ptr CInt
mvPtr Ptr Float
vPtr Ptr CInt
ldvPtr Ptr Float
epsPtr Ptr Float
sfminPtr Ptr Float
tolPtr Ptr CInt
nsweepPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gsvj1 ::
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Float ->
Float ->
Float ->
Int ->
Int ->
IO (Int)
gsvj1 :: Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Float
-> Int
-> Int
-> IO Int
gsvj1 Char
jobv Int
m Int
n1 IOArray (ZeroInt, ZeroInt) Float
a IOArray ZeroInt Float
d IOArray ZeroInt Float
sva Int
mv IOArray (ZeroInt, ZeroInt) Float
v Float
eps Float
sfmin Float
tol Int
nsweep Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let svaDim0 :: Int
svaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
sva
let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
v
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldv :: Int
ldv = Int
vDim1
String -> Bool -> IO ()
Call.assert String
"gsvj1: n == dDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
String -> Bool -> IO ()
Call.assert String
"gsvj1: n == svaDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
svaDim0)
String -> Bool -> IO ()
Call.assert String
"gsvj1: n == vDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobvPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
n1Ptr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n1
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
svaPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
sva
Ptr CInt
mvPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mv
Ptr Float
vPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v
Ptr CInt
ldvPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr Float
epsPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
eps
Ptr Float
sfminPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sfmin
Ptr Float
tolPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tol
Ptr CInt
nsweepPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nsweep
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gsvj1 Ptr CChar
jobvPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
n1Ptr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
dPtr Ptr Float
svaPtr Ptr CInt
mvPtr Ptr Float
vPtr Ptr CInt
ldvPtr Ptr Float
epsPtr Ptr Float
sfminPtr Ptr Float
tolPtr Ptr CInt
nsweepPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gtcon ::
Char ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt CInt ->
Float ->
IO (Float, Int)
gtcon :: Char
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Float
-> IO (Float, Int)
gtcon Char
norm Array ZeroInt Float
dl Array ZeroInt Float
d Array ZeroInt Float
du Array ZeroInt Float
du2 Array ZeroInt CInt
ipiv Float
anorm = do
let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
dl
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
du
let du2Dim0 :: Int
du2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
du2
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"gtcon: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
String -> Bool -> IO ()
Call.assert String
"gtcon: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
String -> Bool -> IO ()
Call.assert String
"gtcon: n-2 == du2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
du2Dim0)
String -> Bool -> IO ()
Call.assert String
"gtcon: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dlPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
dl
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
duPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
du
Ptr Float
du2Ptr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
du2
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gtcon Ptr CChar
normPtr Ptr CInt
nPtr Ptr Float
dlPtr Ptr Float
dPtr Ptr Float
duPtr Ptr Float
du2Ptr Ptr CInt
ipivPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gtrfs ::
Char ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
gtrfs :: Char
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
gtrfs Char
trans Array ZeroInt Float
dl Array ZeroInt Float
d Array ZeroInt Float
du Array ZeroInt Float
dlf Array ZeroInt Float
df Array ZeroInt Float
duf Array ZeroInt Float
du2 Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
x = do
let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
dl
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
du
let dlfDim0 :: Int
dlfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
dlf
let dfDim0 :: Int
dfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
df
let dufDim0 :: Int
dufDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
duf
let du2Dim0 :: Int
du2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
du2
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x
let n :: Int
n = Int
dDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldx :: Int
ldx = Int
xDim1
String -> Bool -> IO ()
Call.assert String
"gtrfs: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
String -> Bool -> IO ()
Call.assert String
"gtrfs: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
String -> Bool -> IO ()
Call.assert String
"gtrfs: n-1 == dlfDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlfDim0)
String -> Bool -> IO ()
Call.assert String
"gtrfs: n == dfDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dfDim0)
String -> Bool -> IO ()
Call.assert String
"gtrfs: n-1 == dufDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dufDim0)
String -> Bool -> IO ()
Call.assert String
"gtrfs: n-2 == du2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
du2Dim0)
String -> Bool -> IO ()
Call.assert String
"gtrfs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
String -> Bool -> IO ()
Call.assert String
"gtrfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
dlPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
dl
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
duPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
du
Ptr Float
dlfPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
dlf
Ptr Float
dfPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
df
Ptr Float
dufPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
duf
Ptr Float
du2Ptr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
du2
Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gtrfs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dlPtr Ptr Float
dPtr Ptr Float
duPtr Ptr Float
dlfPtr Ptr Float
dfPtr Ptr Float
dufPtr Ptr Float
du2Ptr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gtsv ::
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
gtsv :: IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
gtsv IOArray ZeroInt Float
dl IOArray ZeroInt Float
d IOArray ZeroInt Float
du IOArray (ZeroInt, ZeroInt) Float
b = do
let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
dl
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
du
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
dDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"gtsv: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
String -> Bool -> IO ()
Call.assert String
"gtsv: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
dlPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dl
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
duPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
du
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gtsv Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dlPtr Ptr Float
dPtr Ptr Float
duPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gtsvx ::
Char ->
Char ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt CInt ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)
gtsvx :: Char
-> Char
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
gtsvx Char
fact Char
trans Array ZeroInt Float
dl Array ZeroInt Float
d Array ZeroInt Float
du IOArray ZeroInt Float
dlf IOArray ZeroInt Float
df IOArray ZeroInt Float
duf IOArray ZeroInt Float
du2 IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) Float
b Int
ldx = do
let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
dl
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
du
let dlfDim0 :: Int
dlfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
dlf
let dfDim0 :: Int
dfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
df
let dufDim0 :: Int
dufDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
duf
let du2Dim0 :: Int
du2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
du2
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
dDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"gtsvx: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
String -> Bool -> IO ()
Call.assert String
"gtsvx: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
String -> Bool -> IO ()
Call.assert String
"gtsvx: n-1 == dlfDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlfDim0)
String -> Bool -> IO ()
Call.assert String
"gtsvx: n == dfDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dfDim0)
String -> Bool -> IO ()
Call.assert String
"gtsvx: n-1 == dufDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dufDim0)
String -> Bool -> IO ()
Call.assert String
"gtsvx: n-2 == du2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
du2Dim0)
String -> Bool -> IO ()
Call.assert String
"gtsvx: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray (ZeroInt, ZeroInt) Float
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
transPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
dlPtr <- Array ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
dl
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
duPtr <- Array ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
du
Ptr Float
dlfPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dlf
Ptr Float
dfPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
df
Ptr Float
dufPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
duf
Ptr Float
du2Ptr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
du2
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
rcondPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gtsvx Ptr CChar
factPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dlPtr Ptr Float
dPtr Ptr Float
duPtr Ptr Float
dlfPtr Ptr Float
dfPtr Ptr Float
dufPtr Ptr Float
du2Ptr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
x
IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gttrf ::
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
gttrf :: IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
gttrf IOArray ZeroInt Float
dl IOArray ZeroInt Float
d IOArray ZeroInt Float
du = do
let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
dl
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
du
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"gttrf: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
String -> Bool -> IO ()
Call.assert String
"gttrf: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
IOArray ZeroInt Float
du2 <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2)
IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dlPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dl
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
duPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
du
Ptr Float
du2Ptr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
du2
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Array ZeroInt CInt, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt CInt, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gttrf Ptr CInt
nPtr Ptr Float
dlPtr Ptr Float
dPtr Ptr Float
duPtr Ptr Float
du2Ptr Ptr CInt
ipivPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt CInt
-> Int -> (Array ZeroInt Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
du2
IO
(Array ZeroInt CInt
-> Int -> (Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ipiv
IO (Int -> (Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gttrs ::
Char ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
gttrs :: Char
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
gttrs Char
trans Array ZeroInt Float
dl Array ZeroInt Float
d Array ZeroInt Float
du Array ZeroInt Float
du2 Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) Float
b = do
let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
dl
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
du
let du2Dim0 :: Int
du2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
du2
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
dDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"gttrs: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
String -> Bool -> IO ()
Call.assert String
"gttrs: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
String -> Bool -> IO ()
Call.assert String
"gttrs: n-2 == du2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
du2Dim0)
String -> Bool -> IO ()
Call.assert String
"gttrs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
dlPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
dl
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
duPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
du
Ptr Float
du2Ptr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
du2
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gttrs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dlPtr Ptr Float
dPtr Ptr Float
duPtr Ptr Float
du2Ptr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
gtts2 ::
Int ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) Float ->
IO ()
gtts2 :: Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Float
-> IO ()
gtts2 Int
itrans Array ZeroInt Float
dl Array ZeroInt Float
d Array ZeroInt Float
du Array ZeroInt Float
du2 Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) Float
b = do
let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
dl
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
du
let du2Dim0 :: Int
du2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
du2
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
dDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"gtts2: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
String -> Bool -> IO ()
Call.assert String
"gtts2: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
String -> Bool -> IO ()
Call.assert String
"gtts2: n-2 == du2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
du2Dim0)
String -> Bool -> IO ()
Call.assert String
"gtts2: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
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
$ do
Ptr CInt
itransPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itrans
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
dlPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
dl
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
duPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
du
Ptr Float
du2Ptr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
du2
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO () (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gtts2 Ptr CInt
itransPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dlPtr Ptr Float
dPtr Ptr Float
duPtr Ptr Float
du2Ptr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr
sbev ::
Char ->
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)
sbev :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
sbev Char
jobz Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) Float
ab Int
ldz = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2])
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.sbev Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sbevd ::
Char ->
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)
sbevd :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
sbevd Char
jobz Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) Float
ab Int
ldz Int
workSize Int
lwork Int
liwork = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sbevd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sbevx ::
Char ->
Char ->
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Float ->
Float ->
Int ->
Int ->
Float ->
Int ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)
sbevx :: Char
-> Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
sbevx Char
jobz Char
range Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) Float
ab Int
ldq Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray (ZeroInt, ZeroInt) Float
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m]) Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
7Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
rangePtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
vlPtr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
Ptr CInt
iuPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Float
abstolPtr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
Ptr CInt
mPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sbevx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
q
IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ifail
IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sbgst ::
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Int)
sbgst :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
sbgst Char
vect Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) Float
ab Array (ZeroInt, ZeroInt) Float
bb Int
ldx = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let (Int
bbDim0,Int
bbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
bb
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let ldbb :: Int
ldbb = Int
bbDim1
String -> Bool -> IO ()
Call.assert String
"sbgst: n == bbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bbDim0)
IOArray (ZeroInt, ZeroInt) Float
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldx
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
vectPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
vect
Ptr CChar
uploPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kaPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ka
Ptr CInt
kbPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
bbPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
bb
Ptr CInt
ldbbPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.sbgst Ptr CChar
vectPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
bbPtr Ptr CInt
ldbbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
x
IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sbgv ::
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)
sbgv :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
sbgv Char
jobz Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) Float
ab IOArray (ZeroInt, ZeroInt) Float
bb Int
ldz = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let (Int
bbDim0,Int
bbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
bb
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let ldbb :: Int
ldbb = Int
bbDim1
String -> Bool -> IO ()
Call.assert String
"sbgv: n == bbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bbDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ka
Ptr CInt
kbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
bbPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
bb
Ptr CInt
ldbbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbb
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.sbgv Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
bbPtr Ptr CInt
ldbbPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sbgvd ::
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)
sbgvd :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
sbgvd Char
jobz Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) Float
ab IOArray (ZeroInt, ZeroInt) Float
bb Int
ldz Int
lwork Int
liwork = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let (Int
bbDim0,Int
bbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
bb
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let ldbb :: Int
ldbb = Int
bbDim1
String -> Bool -> IO ()
Call.assert String
"sbgvd: n == bbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bbDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ka
Ptr CInt
kbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
bbPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
bb
Ptr CInt
ldbbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbb
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sbgvd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
bbPtr Ptr CInt
ldbbPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sbgvx ::
Char ->
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Float ->
Float ->
Int ->
Int ->
Float ->
Int ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)
sbgvx :: Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
sbgvx Char
jobz Char
range Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) Float
ab IOArray (ZeroInt, ZeroInt) Float
bb Int
ldq Float
vl Float
vu Int
il Int
iu Float
abstol Int
ldz Int
m = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let (Int
bbDim0,Int
bbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
bb
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let ldbb :: Int
ldbb = Int
bbDim1
String -> Bool -> IO ()
Call.assert String
"sbgvx: n == bbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bbDim0)
IOArray (ZeroInt, ZeroInt) Float
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
7Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
rangePtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kaPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ka
Ptr CInt
kbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
bbPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
bb
Ptr CInt
ldbbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbb
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
vlPtr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
Ptr CInt
iuPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Float
abstolPtr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
Ptr CInt
mPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sbgvx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
bbPtr Ptr CInt
ldbbPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
q
IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ifail
IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Int, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sbtrd ::
Char ->
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
sbtrd :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
sbtrd Char
vect Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) Float
ab IOArray (ZeroInt, ZeroInt) Float
q = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let ldq :: Int
ldq = Int
qDim1
String -> Bool -> IO ()
Call.assert String
"sbtrd: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
vectPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
vect
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.sbtrd Ptr CChar
vectPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
syev ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Int)
syev :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Int)
syev Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.syev Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
wPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
syevd ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Float, Int)
syevd :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Float, Int)
syevd Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Int
workSize Int
lwork Int
liwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.syevd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
wPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
syevr ::
Char ->
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Float ->
Float ->
Int ->
Int ->
Float ->
Int ->
Int ->
Int ->
Int ->
IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)
syevr :: Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> Int
-> Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
syevr Char
jobz Char
range Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz Int
lwork Int
liwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m]) Int
ldz
IOArray ZeroInt CInt
isuppz <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*[Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
rangePtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
Ptr CChar
uploPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
vlPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
Ptr CInt
iuPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Float
abstolPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
isuppzPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isuppz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.syevr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr CInt
isuppzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isuppz
IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
syevx ::
Char ->
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Float ->
Float ->
Int ->
Int ->
Float ->
Int ->
Int ->
Int ->
IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)
syevx :: Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
syevx Char
jobz Char
range Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m]) Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
rangePtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
Ptr CChar
uploPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
vlPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
Ptr CInt
iuPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Float
abstolPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.syevx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ifail
IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sygs2 ::
Int ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IO (Int)
sygs2 :: Int
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IO Int
sygs2 Int
itype Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Array (ZeroInt, ZeroInt) Float
b = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"sygs2: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sygs2 Ptr CInt
itypePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sygst ::
Int ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IO (Int)
sygst :: Int
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IO Int
sygst Int
itype Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Array (ZeroInt, ZeroInt) Float
b = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"sygst: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sygst Ptr CInt
itypePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sygv ::
Int ->
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Int)
sygv :: Int
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Int)
sygv Int
itype Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"sygv: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
Ptr CChar
jobzPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sygv Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
wPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sygvd ::
Int ->
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IO (Array ZeroInt Float, Int)
sygvd :: Int
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IO (Array ZeroInt Float, Int)
sygvd Int
itype Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Int
lwork Int
liwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"sygvd: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
Ptr CChar
jobzPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sygvd Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
wPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sygvx ::
Int ->
Char ->
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Float ->
Float ->
Int ->
Int ->
Float ->
Int ->
Int ->
Int ->
IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)
sygvx :: Int
-> Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
sygvx Int
itype Char
jobz Char
range Char
uplo IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"sygvx: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m]) Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
rangePtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
Ptr CChar
uploPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
vlPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
Ptr CInt
iuPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Float
abstolPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sygvx Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ifail
IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sfrk ::
Char ->
Char ->
Char ->
Int ->
Int ->
Float ->
Array (ZeroInt,ZeroInt) Float ->
Float ->
IOArray ZeroInt Float ->
IO ()
sfrk :: Char
-> Char
-> Char
-> Int
-> Int
-> Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> IOArray ZeroInt Float
-> IO ()
sfrk Char
transr Char
uplo Char
trans Int
n Int
k Float
alpha Array (ZeroInt, ZeroInt) Float
a Float
beta IOArray ZeroInt Float
c = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
c
let _ka :: Int
_ka = Int
aDim0
let lda :: Int
lda = Int
aDim1
let _nt :: Int
_nt = Int
cDim0
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
$ do
Ptr CChar
transrPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
alphaPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
alpha
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
betaPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
beta
Ptr Float
cPtr <- IOArray ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.sfrk Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
alphaPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
betaPtr Ptr Float
cPtr
hgeqz ::
Char ->
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
hgeqz :: Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
hgeqz Char
job Char
compq Char
compz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) Float
h IOArray (ZeroInt, ZeroInt) Float
t IOArray (ZeroInt, ZeroInt) Float
q IOArray (ZeroInt, ZeroInt) Float
z Int
lwork = do
let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
h
let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
t
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let n :: Int
n = Int
hDim0
let ldh :: Int
ldh = Int
hDim1
let ldt :: Int
ldt = Int
tDim1
let ldq :: Int
ldq = Int
qDim1
let ldz :: Int
ldz = Int
zDim1
String -> Bool -> IO ()
Call.assert String
"hgeqz: n == tDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tDim0)
String -> Bool -> IO ()
Call.assert String
"hgeqz: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
String -> Bool -> IO ()
Call.assert String
"hgeqz: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
alphar <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
alphai <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
beta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CChar
compqPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compq
Ptr CChar
compzPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr Float
hPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
h
Ptr CInt
ldhPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr Float
tPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
t
Ptr CInt
ldtPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr Float
alpharPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alphar
Ptr Float
alphaiPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alphai
Ptr Float
betaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
beta
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hgeqz Ptr CChar
jobPtr Ptr CChar
compqPtr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
hPtr Ptr CInt
ldhPtr Ptr Float
tPtr Ptr CInt
ldtPtr Ptr Float
alpharPtr Ptr Float
alphaiPtr Ptr Float
betaPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alphar
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alphai
IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
beta
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
spev ::
Char ->
Char ->
Int ->
IOArray ZeroInt Float ->
Int ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)
spev :: Char
-> Char
-> Int
-> IOArray ZeroInt Float
-> Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
spev Char
jobz Char
uplo Int
n IOArray ZeroInt Float
ap Int
ldz = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"spev: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.spev Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
spevd ::
Char ->
Char ->
Int ->
IOArray ZeroInt Float ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)
spevd :: Char
-> Char
-> Int
-> IOArray ZeroInt Float
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
spevd Char
jobz Char
uplo Int
n IOArray ZeroInt Float
ap Int
ldz Int
lwork Int
liwork = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"spevd: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spevd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
spevx ::
Char ->
Char ->
Char ->
Int ->
IOArray ZeroInt Float ->
Float ->
Float ->
Int ->
Int ->
Float ->
Int ->
Int ->
IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)
spevx :: Char
-> Char
-> Char
-> Int
-> IOArray ZeroInt Float
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
spevx Char
jobz Char
range Char
uplo Int
n IOArray ZeroInt Float
ap Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"spevx: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m]) Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
rangePtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
Ptr CChar
uploPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr Float
vlPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
Ptr CInt
iuPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Float
abstolPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spevx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ifail
IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
spgst ::
Int ->
Char ->
Int ->
IOArray ZeroInt Float ->
Array ZeroInt Float ->
IO (Int)
spgst :: Int
-> Char
-> Int
-> IOArray ZeroInt Float
-> Array ZeroInt Float
-> IO Int
spgst Int
itype Char
uplo Int
n IOArray ZeroInt Float
ap Array ZeroInt Float
bp = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
let bpDim0 :: Int
bpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
bp
String -> Bool -> IO ()
Call.assert String
"spgst: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
String -> Bool -> IO ()
Call.assert String
"spgst: n*(n+1)`div`2 == bpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bpDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr Float
bpPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
bp
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.spgst Ptr CInt
itypePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
bpPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
spgv ::
Int ->
Char ->
Char ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Int ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)
spgv :: Int
-> Char
-> Char
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
spgv Int
itype Char
jobz Char
uplo Int
n IOArray ZeroInt Float
ap IOArray ZeroInt Float
bp Int
ldz = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
let bpDim0 :: Int
bpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
bp
String -> Bool -> IO ()
Call.assert String
"spgv: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
String -> Bool -> IO ()
Call.assert String
"spgv: n*(n+1)`div`2 == bpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bpDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr Float
bpPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
bp
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.spgv Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
bpPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
spgvd ::
Int ->
Char ->
Char ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)
spgvd :: Int
-> Char
-> Char
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
spgvd Int
itype Char
jobz Char
uplo Int
n IOArray ZeroInt Float
ap IOArray ZeroInt Float
bp Int
ldz Int
lwork Int
liwork = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
let bpDim0 :: Int
bpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
bp
String -> Bool -> IO ()
Call.assert String
"spgvd: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
String -> Bool -> IO ()
Call.assert String
"spgvd: n*(n+1)`div`2 == bpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bpDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr Float
bpPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
bp
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spgvd Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
bpPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Int -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
spgvx ::
Int ->
Char ->
Char ->
Char ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Float ->
Float ->
Int ->
Int ->
Float ->
Int ->
Int ->
IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)
spgvx :: Int
-> Char
-> Char
-> Char
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
spgvx Int
itype Char
jobz Char
range Char
uplo Int
n IOArray ZeroInt Float
ap IOArray ZeroInt Float
bp Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
let bpDim0 :: Int
bpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
bp
String -> Bool -> IO ()
Call.assert String
"spgvx: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
String -> Bool -> IO ()
Call.assert String
"spgvx: n*(n+1)`div`2 == bpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bpDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m]) Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
rangePtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
Ptr CChar
uploPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr Float
bpPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
bp
Ptr Float
vlPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
Ptr CInt
iuPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Float
abstolPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spgvx Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
bpPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ifail
IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sptrd ::
Char ->
Int ->
IOArray ZeroInt Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
sptrd :: Char
-> Int
-> IOArray ZeroInt Float
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
sptrd Char
uplo Int
n IOArray ZeroInt Float
ap = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"sptrd: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.sptrd Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
tauPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
hsein ::
Char ->
Char ->
Char ->
IOArray ZeroInt Bool ->
Array (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
hsein :: Char
-> Char
-> Char
-> IOArray ZeroInt Bool
-> Array (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
hsein Char
side Char
eigsrc Char
initv IOArray ZeroInt Bool
select Array (ZeroInt, ZeroInt) Float
h IOArray ZeroInt Float
wr Array ZeroInt Float
wi IOArray (ZeroInt, ZeroInt) Float
vl IOArray (ZeroInt, ZeroInt) Float
vr = do
let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Bool -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Bool
select
let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
h
let wrDim0 :: Int
wrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
wr
let wiDim0 :: Int
wiDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
wi
let (Int
vlDim0,Int
vlDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
vl
let (Int
vrDim0,Int
vrDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
vr
let n :: Int
n = Int
selectDim0
let ldh :: Int
ldh = Int
hDim1
let mm :: Int
mm = Int
vlDim0
let ldvl :: Int
ldvl = Int
vlDim1
let ldvr :: Int
ldvr = Int
vrDim1
String -> Bool -> IO ()
Call.assert String
"hsein: n == hDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
hDim0)
String -> Bool -> IO ()
Call.assert String
"hsein: n == wrDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wrDim0)
String -> Bool -> IO ()
Call.assert String
"hsein: n == wiDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wiDim0)
String -> Bool -> IO ()
Call.assert String
"hsein: mm == vrDim0" (Int
mm Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vrDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ((Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
ifaill <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
IOArray ZeroInt CInt
ifailr <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
ContT
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> ContT
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
eigsrcPtr <- Char
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
eigsrc
Ptr CChar
initvPtr <- Char
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
initv
Ptr Bool
selectPtr <- IOArray ZeroInt Bool
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr Bool)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Bool
select
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
hPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
h
Ptr CInt
ldhPtr <- Int
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr Float
wrPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wr
Ptr Float
wiPtr <- Array ZeroInt Float
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
wi
Ptr Float
vlPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vl
Ptr CInt
ldvlPtr <- Int
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr Float
vrPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vr
Ptr CInt
ldvrPtr <- Int
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr CInt
mmPtr <- Int
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mm
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
ifaillPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifaill
Ptr CInt
ifailrPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifailr
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) IO ()
forall a.
IO a
-> ContT (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) IO ())
-> IO ()
-> ContT (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hsein Ptr CChar
sidePtr Ptr CChar
eigsrcPtr Ptr CChar
initvPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr Float
hPtr Ptr CInt
ldhPtr Ptr Float
wrPtr Ptr Float
wiPtr Ptr Float
vlPtr Ptr CInt
ldvlPtr Ptr Float
vrPtr Ptr CInt
ldvrPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr Float
workPtr Ptr CInt
ifaillPtr Ptr CInt
ifailrPtr Ptr CInt
infoPtr
IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO
(Int
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Int
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Int -> (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ifaill
IO
(Array ZeroInt CInt
-> Int -> (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO (Int -> (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ifailr
IO (Int -> (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Int -> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
hseqr ::
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
hseqr :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
hseqr Char
job Char
compz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) Float
h IOArray (ZeroInt, ZeroInt) Float
z Int
lwork = do
let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
h
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let n :: Int
n = Int
hDim0
let ldh :: Int
ldh = Int
hDim1
let ldz :: Int
ldz = Int
zDim1
String -> Bool -> IO ()
Call.assert String
"hseqr: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
wr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
wi <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CChar
compzPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr Float
hPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
h
Ptr CInt
ldhPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr Float
wrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wr
Ptr Float
wiPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wi
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hseqr Ptr CChar
jobPtr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
hPtr Ptr CInt
ldhPtr Ptr Float
wrPtr Ptr Float
wiPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wi
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ilalc ::
Int ->
Array (ZeroInt,ZeroInt) Float ->
IO CInt
ilalc :: Int -> Array (ZeroInt, ZeroInt) Float -> IO CInt
ilalc Int
m Array (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
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
mPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO CInt (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
IO CInt -> ContT CInt IO CInt
forall a. IO a -> ContT CInt IO a
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 -> Ptr CInt -> Ptr Float -> Ptr CInt -> IO CInt
FFI.ilalc Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr
ilalr ::
Int ->
Array (ZeroInt,ZeroInt) Float ->
IO CInt
ilalr :: Int -> Array (ZeroInt, ZeroInt) Float -> IO CInt
ilalr Int
m Array (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
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
mPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO CInt (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
IO CInt -> ContT CInt IO CInt
forall a. IO a -> ContT CInt IO a
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 -> Ptr CInt -> Ptr Float -> Ptr CInt -> IO CInt
FFI.ilalr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr
isnan ::
Float ->
IO Bool
isnan :: Float -> IO Bool
isnan Float
sin_ = do
ContT Bool IO Bool -> IO Bool
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Bool IO Bool -> IO Bool) -> ContT Bool IO Bool -> IO Bool
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
sin_Ptr <- Float -> FortranIO Bool (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sin_
IO Bool -> ContT Bool IO Bool
forall a. IO a -> ContT Bool IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> ContT Bool IO Bool) -> IO Bool -> ContT Bool IO Bool
forall a b. (a -> b) -> a -> b
$ Ptr Float -> IO Bool
FFI.isnan Ptr Float
sin_Ptr
labad ::
Float ->
Float ->
IO (Float, Float)
labad :: Float -> Float -> IO (Float, Float)
labad Float
small Float
large = do
ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float) IO (Float, Float) -> IO (Float, Float))
-> ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
smallPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
small
Ptr Float
largePtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
large
IO () -> ContT (Float, Float) IO ()
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float) IO ())
-> IO () -> ContT (Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Float -> Ptr Float -> IO ()
FFI.labad Ptr Float
smallPtr Ptr Float
largePtr
IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float) -> ContT (Float, Float) IO (Float, Float))
-> IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> (Float, Float))
-> IO (Float -> Float -> (Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Float -> (Float, Float))
-> IO Float -> IO (Float -> (Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
smallPtr
IO (Float -> (Float, Float)) -> IO Float -> IO (Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
largePtr
labrd ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float)
labrd :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
labrd Int
m Int
nb IOArray (ZeroInt, ZeroInt) Float
a Int
ldx Int
ldy = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
IOArray ZeroInt Float
tauq <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
IOArray ZeroInt Float
taup <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
IOArray (ZeroInt, ZeroInt) Float
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldx
IOArray (ZeroInt, ZeroInt) Float
y <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldy
ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
tauqPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tauq
Ptr Float
taupPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
taup
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
yPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
y
Ptr CInt
ldyPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldy
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.labrd Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nbPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
tauqPtr Ptr Float
taupPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
yPtr Ptr CInt
ldyPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tauq
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
taup
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
x
IO
(Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
y
lacn2 ::
IOArray ZeroInt Float ->
Float ->
Int ->
IOArray ZeroInt CInt ->
IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
lacn2 :: IOArray ZeroInt Float
-> Float
-> Int
-> IOArray ZeroInt CInt
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
lacn2 IOArray ZeroInt Float
x Float
est Int
kase IOArray ZeroInt CInt
isave = do
let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
x
let isaveDim0 :: Int
isaveDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
isave
let n :: Int
n = Int
xDim0
String -> Bool -> IO ()
Call.assert String
"lacn2: 3 == isaveDim0" (Int
3 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
isaveDim0)
IOArray ZeroInt Float
v <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
isgn <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
vPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
v
Ptr Float
xPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
Ptr CInt
isgnPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isgn
Ptr Float
estPtr <- Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
est
Ptr CInt
kasePtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kase
Ptr CInt
isavePtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isave
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Float, Array ZeroInt CInt, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lacn2 Ptr CInt
nPtr Ptr Float
vPtr Ptr Float
xPtr Ptr CInt
isgnPtr Ptr Float
estPtr Ptr CInt
kasePtr Ptr CInt
isavePtr
IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
forall a.
IO a
-> ContT (Array ZeroInt Float, Array ZeroInt CInt, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt CInt
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt CInt
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
v
IO
(Array ZeroInt CInt
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Float
-> Int -> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isgn
IO
(Float
-> Int -> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
-> IO Float
-> IO
(Int -> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
estPtr
IO (Int -> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
kasePtr)
lacon ::
IOArray ZeroInt Float ->
Float ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
lacon :: IOArray ZeroInt Float
-> Float
-> Int
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
lacon IOArray ZeroInt Float
x Float
est Int
kase = do
let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
x
let n :: Int
n = Int
xDim0
IOArray ZeroInt Float
v <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
isgn <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
vPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
v
Ptr Float
xPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
Ptr CInt
isgnPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isgn
Ptr Float
estPtr <- Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
est
Ptr CInt
kasePtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kase
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Float, Array ZeroInt CInt, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lacon Ptr CInt
nPtr Ptr Float
vPtr Ptr Float
xPtr Ptr CInt
isgnPtr Ptr Float
estPtr Ptr CInt
kasePtr
IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
forall a.
IO a
-> ContT (Array ZeroInt Float, Array ZeroInt CInt, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt CInt
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt CInt
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
v
IO
(Array ZeroInt CInt
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Float
-> Int -> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isgn
IO
(Float
-> Int -> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
-> IO Float
-> IO
(Int -> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
estPtr
IO (Int -> (Array ZeroInt Float, Array ZeroInt CInt, Float, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
kasePtr)
lacpy ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float)
lacpy :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float)
lacpy Char
uplo Int
m Array (ZeroInt, ZeroInt) Float
a Int
ldb = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray (ZeroInt, ZeroInt) Float
b <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldb
ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
-> IO (Array (ZeroInt, ZeroInt) Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
-> IO (Array (ZeroInt, ZeroInt) Float))
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
-> IO (Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
mPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
IO () -> ContT (Array (ZeroInt, ZeroInt) Float) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lacpy Ptr CChar
uploPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr
IO (Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
b
ladiv ::
Float ->
Float ->
Float ->
Float ->
IO (Float, Float)
ladiv :: Float -> Float -> Float -> Float -> IO (Float, Float)
ladiv Float
a Float
b Float
c Float
d = do
ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float) IO (Float, Float) -> IO (Float, Float))
-> ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
aPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
a
Ptr Float
bPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
b
Ptr Float
cPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
c
Ptr Float
dPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
d
Ptr Float
pPtr <- FortranIO (Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
qPtr <- FortranIO (Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float) IO ()
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float) IO ())
-> IO () -> ContT (Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.ladiv Ptr Float
aPtr Ptr Float
bPtr Ptr Float
cPtr Ptr Float
dPtr Ptr Float
pPtr Ptr Float
qPtr
IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float) -> ContT (Float, Float) IO (Float, Float))
-> IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> (Float, Float))
-> IO (Float -> Float -> (Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Float -> (Float, Float))
-> IO Float -> IO (Float -> (Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
pPtr
IO (Float -> (Float, Float)) -> IO Float -> IO (Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
qPtr
lae2 ::
Float ->
Float ->
Float ->
IO (Float, Float)
lae2 :: Float -> Float -> Float -> IO (Float, Float)
lae2 Float
a Float
b Float
c = do
ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float) IO (Float, Float) -> IO (Float, Float))
-> ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
aPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
a
Ptr Float
bPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
b
Ptr Float
cPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
c
Ptr Float
rt1Ptr <- FortranIO (Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
rt2Ptr <- FortranIO (Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float) IO ()
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float) IO ())
-> IO () -> ContT (Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Float
-> Ptr Float -> Ptr Float -> Ptr Float -> Ptr Float -> IO ()
FFI.lae2 Ptr Float
aPtr Ptr Float
bPtr Ptr Float
cPtr Ptr Float
rt1Ptr Ptr Float
rt2Ptr
IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float) -> ContT (Float, Float) IO (Float, Float))
-> IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> (Float, Float))
-> IO (Float -> Float -> (Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Float -> (Float, Float))
-> IO Float -> IO (Float -> (Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rt1Ptr
IO (Float -> (Float, Float)) -> IO Float -> IO (Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rt2Ptr
laebz ::
Int ->
Int ->
Int ->
Float ->
Float ->
Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
IOArray ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) CInt ->
IO (Int, Int)
laebz :: Int
-> Int
-> Int
-> Float
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> IOArray ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) CInt
-> IO (Int, Int)
laebz Int
ijob Int
nitmax Int
nbmin Float
abstol Float
reltol Float
pivmin Array ZeroInt Float
d Array ZeroInt Float
e Array ZeroInt Float
e2 IOArray ZeroInt CInt
nval IOArray (ZeroInt, ZeroInt) Float
ab IOArray ZeroInt Float
c IOArray (ZeroInt, ZeroInt) CInt
nab = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e
let e2Dim0 :: Int
e2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e2
let nvalDim0 :: Int
nvalDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
nval
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
c
let (Int
nabDim0,Int
nabDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) CInt -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) CInt
nab
let n :: Int
n = Int
dDim0
let minp :: Int
minp = Int
nvalDim0
let mmax :: Int
mmax = Int
abDim1
String -> Bool -> IO ()
Call.assert String
"laebz: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"laebz: n == e2Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
e2Dim0)
String -> Bool -> IO ()
Call.assert String
"laebz: 2 == abDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
abDim0)
String -> Bool -> IO ()
Call.assert String
"laebz: mmax == cDim0" (Int
mmax Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
String -> Bool -> IO ()
Call.assert String
"laebz: 2 == nabDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
nabDim0)
String -> Bool -> IO ()
Call.assert String
"laebz: mmax == nabDim1" (Int
mmax Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
nabDim1)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mmax
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mmax
ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int) IO (Int, Int) -> IO (Int, Int))
-> ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
ijobPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
Ptr CInt
nitmaxPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nitmax
Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
mmaxPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mmax
Ptr CInt
minpPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
minp
Ptr CInt
nbminPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nbmin
Ptr Float
abstolPtr <- Float -> FortranIO (Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
Ptr Float
reltolPtr <- Float -> FortranIO (Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
reltol
Ptr Float
pivminPtr <- Float -> FortranIO (Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
pivmin
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
ePtr <- Array ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e
Ptr Float
e2Ptr <- Array ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e2
Ptr CInt
nvalPtr <- IOArray ZeroInt CInt -> FortranIO (Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
nval
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr Float
cPtr <- IOArray ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
Ptr CInt
moutPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
nabPtr <- IOArray (ZeroInt, ZeroInt) CInt -> FortranIO (Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) CInt
nab
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Int, Int) IO ()
forall a. IO a -> ContT (Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int) IO ())
-> IO () -> ContT (Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laebz Ptr CInt
ijobPtr Ptr CInt
nitmaxPtr Ptr CInt
nPtr Ptr CInt
mmaxPtr Ptr CInt
minpPtr Ptr CInt
nbminPtr Ptr Float
abstolPtr Ptr Float
reltolPtr Ptr Float
pivminPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
e2Ptr Ptr CInt
nvalPtr Ptr Float
abPtr Ptr Float
cPtr Ptr CInt
moutPtr Ptr CInt
nabPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
forall a. IO a -> ContT (Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int) -> ContT (Int, Int) IO (Int, Int))
-> IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ (Int -> Int -> (Int, Int)) -> IO (Int -> Int -> (Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Int -> Int -> (Int, Int)) -> IO Int -> IO (Int -> (Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
moutPtr)
IO (Int -> (Int, Int)) -> IO Int -> IO (Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
laed0 ::
Int ->
Int ->
IOArray ZeroInt Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Int)
laed0 :: Int
-> Int
-> IOArray ZeroInt Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
laed0 Int
icompq Int
qsiz IOArray ZeroInt Float
d Array ZeroInt Float
e IOArray (ZeroInt, ZeroInt) Float
q Int
ldqs Int
workSize Int
iworkSize = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let n :: Int
n = Int
dDim0
let ldq :: Int
ldq = Int
qDim1
String -> Bool -> IO ()
Call.assert String
"laed0: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"laed0: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
IOArray (ZeroInt, ZeroInt) Float
qstore <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldqs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
iworkSize
ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
icompqPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
Ptr CInt
qsizPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
qsiz
Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- Array ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
qstorePtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
qstore
Ptr CInt
ldqsPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldqs
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed0 Ptr CInt
icompqPtr Ptr CInt
qsizPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
qstorePtr Ptr CInt
ldqsPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
qstore
IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
laed1 ::
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt CInt ->
Float ->
Int ->
IO (Int)
laed1 :: IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt CInt
-> Float
-> Int
-> IO Int
laed1 IOArray ZeroInt Float
d IOArray (ZeroInt, ZeroInt) Float
q IOArray ZeroInt CInt
indxq Float
rho Int
cutpnt = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let indxqDim0 :: Int
indxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
indxq
let n :: Int
n = Int
dDim0
let ldq :: Int
ldq = Int
qDim1
String -> Bool -> IO ()
Call.assert String
"laed1: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
String -> Bool -> IO ()
Call.assert String
"laed1: n == indxqDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
indxqDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nInt -> Int -> Int
forall a. Num a => a -> Int -> a
^!Int
2)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr CInt
indxqPtr <- IOArray ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indxq
Ptr Float
rhoPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rho
Ptr CInt
cutpntPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
cutpnt
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed1 Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr CInt
indxqPtr Ptr Float
rhoPtr Ptr CInt
cutpntPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
laed2 ::
Int ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt CInt ->
Float ->
Array ZeroInt Float ->
IO (Int, Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int)
laed2 :: Int
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt CInt
-> Float
-> Array ZeroInt Float
-> IO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
laed2 Int
n1 IOArray ZeroInt Float
d IOArray (ZeroInt, ZeroInt) Float
q IOArray ZeroInt CInt
indxq Float
rho Array ZeroInt Float
z = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let indxqDim0 :: Int
indxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
indxq
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
z
let n :: Int
n = Int
dDim0
let ldq :: Int
ldq = Int
qDim1
String -> Bool -> IO ()
Call.assert String
"laed2: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
String -> Bool -> IO ()
Call.assert String
"laed2: n == indxqDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
indxqDim0)
String -> Bool -> IO ()
Call.assert String
"laed2: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
dlamda <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
q2 <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
n1Int -> Int -> Int
forall a. Num a => a -> Int -> a
^!Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
n1)Int -> Int -> Int
forall a. Num a => a -> Int -> a
^!Int
2)
IOArray ZeroInt CInt
indx <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
indxc <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
indxp <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
coltyp <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> ContT
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
kPtr <- FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
n1Ptr <- Int
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n1
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr CInt
indxqPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indxq
Ptr Float
rhoPtr <- Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rho
Ptr Float
zPtr <- Array ZeroInt Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
z
Ptr Float
dlamdaPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dlamda
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
q2Ptr <- IOArray ZeroInt Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
q2
Ptr CInt
indxPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indx
Ptr CInt
indxcPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indxc
Ptr CInt
indxpPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indxp
Ptr CInt
coltypPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
coltyp
Ptr CInt
infoPtr <- FortranIO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed2 Ptr CInt
kPtr Ptr CInt
nPtr Ptr CInt
n1Ptr Ptr Float
dPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr CInt
indxqPtr Ptr Float
rhoPtr Ptr Float
zPtr Ptr Float
dlamdaPtr Ptr Float
wPtr Ptr Float
q2Ptr Ptr CInt
indxPtr Ptr CInt
indxcPtr Ptr CInt
indxpPtr Ptr CInt
coltypPtr Ptr CInt
infoPtr
IO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO
(Int
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,)
IO
(Int
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
kPtr)
IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rhoPtr
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
dlamda
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
q2
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indx
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indxc
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indxp
IO
(Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
coltyp
IO
(Int
-> (Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Int, Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
laed3 ::
Int ->
Int ->
Float ->
IOArray ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
IOArray ZeroInt Float ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt Float, Int)
laed3 :: Int
-> Int
-> Float
-> IOArray ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> IOArray ZeroInt Float
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
laed3 Int
n1 Int
ldq Float
rho IOArray ZeroInt Float
dlamda Array ZeroInt Float
q2 Array ZeroInt CInt
indx Array ZeroInt CInt
ctot IOArray ZeroInt Float
w = do
let dlamdaDim0 :: Int
dlamdaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
dlamda
let q2Dim0 :: Int
q2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
q2
let indxDim0 :: Int
indxDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
indx
let ctotDim0 :: Int
ctotDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ctot
let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
w
let k :: Int
k = Int
dlamdaDim0
let n :: Int
n = Int
indxDim0
String -> Int -> IO ()
Call.ignore String
"laed3: ldq2*n == q2Dim0" Int
q2Dim0
String -> Bool -> IO ()
Call.assert String
"laed3: 4 == ctotDim0" (Int
4 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ctotDim0)
String -> Bool -> IO ()
Call.assert String
"laed3: k == wDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq
IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
n1Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
kPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
n1Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n1
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
rhoPtr <- Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rho
Ptr Float
dlamdaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dlamda
Ptr Float
q2Ptr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
q2
Ptr CInt
indxPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
indx
Ptr CInt
ctotPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ctot
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laed3 Ptr CInt
kPtr Ptr CInt
nPtr Ptr CInt
n1Ptr Ptr Float
dPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
rhoPtr Ptr Float
dlamdaPtr Ptr Float
q2Ptr Ptr CInt
indxPtr Ptr CInt
ctotPtr Ptr Float
wPtr Ptr Float
sPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
q
IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
IO
(Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
laed4 ::
Int ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Float ->
IO (Array ZeroInt Float, Float, Int)
laed4 :: Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> IO (Array ZeroInt Float, Float, Int)
laed4 Int
i Array ZeroInt Float
d Array ZeroInt Float
z Float
rho = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
z
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"laed4: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
delta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Float, Int)
IO
(Array ZeroInt Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Float, Int)
IO
(Array ZeroInt Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Int))
-> ContT
(Array ZeroInt Float, Float, Int)
IO
(Array ZeroInt Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iPtr <- Int -> FortranIO (Array ZeroInt Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
zPtr <- Array ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
z
Ptr Float
deltaPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
delta
Ptr Float
rhoPtr <- Float -> FortranIO (Array ZeroInt Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rho
Ptr Float
dlamPtr <- FortranIO (Array ZeroInt Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laed4 Ptr CInt
nPtr Ptr CInt
iPtr Ptr Float
dPtr Ptr Float
zPtr Ptr Float
deltaPtr Ptr Float
rhoPtr Ptr Float
dlamPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Int)
IO
(Array ZeroInt Float, Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Int)
IO
(Array ZeroInt Float, Float, Int))
-> IO (Array ZeroInt Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Int)
IO
(Array ZeroInt Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Float -> Int -> (Array ZeroInt Float, Float, Int))
-> IO
(Array ZeroInt Float
-> Float -> Int -> (Array ZeroInt Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Float -> Int -> (Array ZeroInt Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Float -> Int -> (Array ZeroInt Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
delta
IO (Float -> Int -> (Array ZeroInt Float, Float, Int))
-> IO Float -> IO (Int -> (Array ZeroInt Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dlamPtr
IO (Int -> (Array ZeroInt Float, Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
laed5 ::
Int ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Float ->
IO (Array ZeroInt Float, Float)
laed5 :: Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> IO (Array ZeroInt Float, Float)
laed5 Int
i Array ZeroInt Float
d Array ZeroInt Float
z Float
rho = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
z
String -> Bool -> IO ()
Call.assert String
"laed5: 2 == dDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
String -> Bool -> IO ()
Call.assert String
"laed5: 2 == zDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
delta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
ContT (Array ZeroInt Float, Float) IO (Array ZeroInt Float, Float)
-> IO (Array ZeroInt Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Float) IO (Array ZeroInt Float, Float)
-> IO (Array ZeroInt Float, Float))
-> ContT
(Array ZeroInt Float, Float) IO (Array ZeroInt Float, Float)
-> IO (Array ZeroInt Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
iPtr <- Int -> FortranIO (Array ZeroInt Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
zPtr <- Array ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
z
Ptr Float
deltaPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
delta
Ptr Float
rhoPtr <- Float -> FortranIO (Array ZeroInt Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rho
Ptr Float
dlamPtr <- FortranIO (Array ZeroInt Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Float) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.laed5 Ptr CInt
iPtr Ptr Float
dPtr Ptr Float
zPtr Ptr Float
deltaPtr Ptr Float
rhoPtr Ptr Float
dlamPtr
IO (Array ZeroInt Float, Float)
-> ContT
(Array ZeroInt Float, Float) IO (Array ZeroInt Float, Float)
forall a. IO a -> ContT (Array ZeroInt Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float)
-> ContT
(Array ZeroInt Float, Float) IO (Array ZeroInt Float, Float))
-> IO (Array ZeroInt Float, Float)
-> ContT
(Array ZeroInt Float, Float) IO (Array ZeroInt Float, Float)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Float -> (Array ZeroInt Float, Float))
-> IO
(Array ZeroInt Float -> Float -> (Array ZeroInt Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Float -> (Array ZeroInt Float, Float))
-> IO (Array ZeroInt Float)
-> IO (Float -> (Array ZeroInt Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
delta
IO (Float -> (Array ZeroInt Float, Float))
-> IO Float -> IO (Array ZeroInt Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dlamPtr
laed6 ::
Int ->
Bool ->
Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Float ->
IO (Float, Int)
laed6 :: Int
-> Bool
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> IO (Float, Int)
laed6 Int
kniter Bool
orgati Float
rho Array ZeroInt Float
d Array ZeroInt Float
z Float
finit = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
z
String -> Bool -> IO ()
Call.assert String
"laed6: 3 == dDim0" (Int
3 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
String -> Bool -> IO ()
Call.assert String
"laed6: 3 == zDim0" (Int
3 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
kniterPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kniter
Ptr Bool
orgatiPtr <- Bool -> FortranIO (Float, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
orgati
Ptr Float
rhoPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rho
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
zPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
z
Ptr Float
finitPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
finit
Ptr Float
tauPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Bool
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laed6 Ptr CInt
kniterPtr Ptr Bool
orgatiPtr Ptr Float
rhoPtr Ptr Float
dPtr Ptr Float
zPtr Ptr Float
finitPtr Ptr Float
tauPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
tauPtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
laed7 ::
Int ->
Int ->
Int ->
Int ->
Int ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Float ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt CInt ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) CInt ->
Array (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt CInt, Int)
laed7 :: Int
-> Int
-> Int
-> Int
-> Int
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Float
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt CInt, Int)
laed7 Int
icompq Int
qsiz Int
tlvls Int
curlvl Int
curpbm IOArray ZeroInt Float
d IOArray (ZeroInt, ZeroInt) Float
q Float
rho Int
cutpnt IOArray ZeroInt Float
qstore IOArray ZeroInt CInt
qptr Array ZeroInt CInt
prmptr Array ZeroInt CInt
perm Array ZeroInt CInt
givptr Array (ZeroInt, ZeroInt) CInt
givcol Array (ZeroInt, ZeroInt) Float
givnum = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let qstoreDim0 :: Int
qstoreDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
qstore
let qptrDim0 :: Int
qptrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
qptr
let prmptrDim0 :: Int
prmptrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
prmptr
let permDim0 :: Int
permDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
perm
let givptrDim0 :: Int
givptrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
givptr
let (Int
givcolDim0,Int
givcolDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) CInt -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) CInt
givcol
let (Int
givnumDim0,Int
givnumDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
givnum
let n :: Int
n = Int
dDim0
let ldq :: Int
ldq = Int
qDim1
let nlgn :: Int
nlgn = Int
prmptrDim0
String -> Bool -> IO ()
Call.assert String
"laed7: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
String -> Bool -> IO ()
Call.assert String
"laed7: n^!2+1 == qstoreDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> Int -> a
^!Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qstoreDim0)
String -> Bool -> IO ()
Call.assert String
"laed7: n+2 == qptrDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qptrDim0)
String -> Bool -> IO ()
Call.assert String
"laed7: nlgn == permDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
permDim0)
String -> Bool -> IO ()
Call.assert String
"laed7: nlgn == givptrDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givptrDim0)
String -> Bool -> IO ()
Call.assert String
"laed7: nlgn == givcolDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givcolDim0)
String -> Bool -> IO ()
Call.assert String
"laed7: 2 == givcolDim1" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givcolDim1)
String -> Bool -> IO ()
Call.assert String
"laed7: nlgn == givnumDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givnumDim0)
String -> Bool -> IO ()
Call.assert String
"laed7: 2 == givnumDim1" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givnumDim1)
IOArray ZeroInt CInt
indxq <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
qsizInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
icompqPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
qsizPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
qsiz
Ptr CInt
tlvlsPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
tlvls
Ptr CInt
curlvlPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
curlvl
Ptr CInt
curpbmPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
curpbm
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr CInt
indxqPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indxq
Ptr Float
rhoPtr <- Float -> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rho
Ptr CInt
cutpntPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
cutpnt
Ptr Float
qstorePtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
qstore
Ptr CInt
qptrPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
qptr
Ptr CInt
prmptrPtr <- Array ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
prmptr
Ptr CInt
permPtr <- Array ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
perm
Ptr CInt
givptrPtr <- Array ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
givptr
Ptr CInt
givcolPtr <- Array (ZeroInt, ZeroInt) CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) CInt
givcol
Ptr Float
givnumPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
givnum
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed7 Ptr CInt
icompqPtr Ptr CInt
nPtr Ptr CInt
qsizPtr Ptr CInt
tlvlsPtr Ptr CInt
curlvlPtr Ptr CInt
curpbmPtr Ptr Float
dPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr CInt
indxqPtr Ptr Float
rhoPtr Ptr CInt
cutpntPtr Ptr Float
qstorePtr Ptr CInt
qptrPtr Ptr CInt
prmptrPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr Float
givnumPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt) -> IO (Int -> (Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indxq
IO (Int -> (Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
laed8 ::
Int ->
Int ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
Float ->
Int ->
Array ZeroInt Float ->
Int ->
IO (Int, Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt Float, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Array ZeroInt CInt, Int)
laed8 :: Int
-> Int
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Float
-> Int
-> Array ZeroInt Float
-> Int
-> IO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
laed8 Int
icompq Int
qsiz IOArray ZeroInt Float
d IOArray (ZeroInt, ZeroInt) Float
q Array ZeroInt CInt
indxq Float
rho Int
cutpnt Array ZeroInt Float
z Int
ldq2 = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let indxqDim0 :: Int
indxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
indxq
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
z
let n :: Int
n = Int
dDim0
let ldq :: Int
ldq = Int
qDim1
String -> Bool -> IO ()
Call.assert String
"laed8: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
String -> Bool -> IO ()
Call.assert String
"laed8: n == indxqDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
indxqDim0)
String -> Bool -> IO ()
Call.assert String
"laed8: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
dlamda <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
q2 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq2
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
perm <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) CInt
givcol <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) CInt)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
2
IOArray (ZeroInt, ZeroInt) Float
givnum <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
2
IOArray ZeroInt CInt
indxp <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
indx <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> ContT
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
icompqPtr <- Int
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
Ptr CInt
kPtr <- FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
qsizPtr <- Int
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
qsiz
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr CInt
indxqPtr <- Array ZeroInt CInt
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
indxq
Ptr Float
rhoPtr <- Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rho
Ptr CInt
cutpntPtr <- Int
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
cutpnt
Ptr Float
zPtr <- Array ZeroInt Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
z
Ptr Float
dlamdaPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dlamda
Ptr Float
q2Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q2
Ptr CInt
ldq2Ptr <- Int
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq2
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr CInt
permPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
perm
Ptr CInt
givptrPtr <- FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
givcolPtr <- IOArray (ZeroInt, ZeroInt) CInt
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) CInt
givcol
Ptr Float
givnumPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
givnum
Ptr CInt
indxpPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indxp
Ptr CInt
indxPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indx
Ptr CInt
infoPtr <- FortranIO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed8 Ptr CInt
icompqPtr Ptr CInt
kPtr Ptr CInt
nPtr Ptr CInt
qsizPtr Ptr Float
dPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr CInt
indxqPtr Ptr Float
rhoPtr Ptr CInt
cutpntPtr Ptr Float
zPtr Ptr Float
dlamdaPtr Ptr Float
q2Ptr Ptr CInt
ldq2Ptr Ptr Float
wPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr Float
givnumPtr Ptr CInt
indxpPtr Ptr CInt
indxPtr Ptr CInt
infoPtr
IO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO
(Int
-> Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,)
IO
(Int
-> Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
kPtr)
IO
(Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rhoPtr
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
dlamda
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
q2
IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
perm
IO
(Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
givptrPtr)
IO
(Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) CInt)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) CInt
-> IO (Array (ZeroInt, ZeroInt) CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) CInt
givcol
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
givnum
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indxp
IO
(Array ZeroInt CInt
-> Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indx
IO
(Int
-> (Int, Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Int, Float, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
laed9 ::
Int ->
Int ->
Int ->
Int ->
Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Int ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)
laed9 :: Int
-> Int
-> Int
-> Int
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
laed9 Int
kstart Int
kstop Int
n Int
ldq Float
rho Array ZeroInt Float
dlamda Array ZeroInt Float
w Int
lds = do
let dlamdaDim0 :: Int
dlamdaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
dlamda
let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
w
let k :: Int
k = Int
dlamdaDim0
String -> Bool -> IO ()
Call.assert String
"laed9: k == wDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq
IOArray (ZeroInt, ZeroInt) Float
s <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
k Int
lds
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
kPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr CInt
kstartPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kstart
Ptr CInt
kstopPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kstop
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
rhoPtr <- Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rho
Ptr Float
dlamdaPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
dlamda
Ptr Float
wPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
w
Ptr Float
sPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
s
Ptr CInt
ldsPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lds
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed9 Ptr CInt
kPtr Ptr CInt
kstartPtr Ptr CInt
kstopPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
rhoPtr Ptr Float
dlamdaPtr Ptr Float
wPtr Ptr Float
sPtr Ptr CInt
ldsPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
q
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
s
IO
(Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
laeda ::
Int ->
Int ->
Int ->
Int ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) CInt ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Array ZeroInt CInt ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
laeda :: Int
-> Int
-> Int
-> Int
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
laeda Int
n Int
tlvls Int
curlvl Int
curpbm Array ZeroInt CInt
prmptr Array ZeroInt CInt
perm Array ZeroInt CInt
givptr Array (ZeroInt, ZeroInt) CInt
givcol Array (ZeroInt, ZeroInt) Float
givnum Array ZeroInt Float
q Array ZeroInt CInt
qptr = do
let prmptrDim0 :: Int
prmptrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
prmptr
let permDim0 :: Int
permDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
perm
let givptrDim0 :: Int
givptrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
givptr
let (Int
givcolDim0,Int
givcolDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) CInt -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) CInt
givcol
let (Int
givnumDim0,Int
givnumDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
givnum
let qDim0 :: Int
qDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
q
let qptrDim0 :: Int
qptrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
qptr
let nlgn :: Int
nlgn = Int
prmptrDim0
String -> Bool -> IO ()
Call.assert String
"laeda: nlgn == permDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
permDim0)
String -> Bool -> IO ()
Call.assert String
"laeda: nlgn == givptrDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givptrDim0)
String -> Bool -> IO ()
Call.assert String
"laeda: nlgn == givcolDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givcolDim0)
String -> Bool -> IO ()
Call.assert String
"laeda: 2 == givcolDim1" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givcolDim1)
String -> Bool -> IO ()
Call.assert String
"laeda: nlgn == givnumDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givnumDim0)
String -> Bool -> IO ()
Call.assert String
"laeda: 2 == givnumDim1" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givnumDim1)
String -> Bool -> IO ()
Call.assert String
"laeda: n^!2 == qDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> Int -> a
^!Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
String -> Bool -> IO ()
Call.assert String
"laeda: n+2 == qptrDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qptrDim0)
IOArray ZeroInt Float
z <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
ztemp <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
tlvlsPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
tlvls
Ptr CInt
curlvlPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
curlvl
Ptr CInt
curpbmPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
curpbm
Ptr CInt
prmptrPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
prmptr
Ptr CInt
permPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
perm
Ptr CInt
givptrPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
givptr
Ptr CInt
givcolPtr <- Array (ZeroInt, ZeroInt) CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) CInt
givcol
Ptr Float
givnumPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
givnum
Ptr Float
qPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
q
Ptr CInt
qptrPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
qptr
Ptr Float
zPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
z
Ptr Float
ztempPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ztemp
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laeda Ptr CInt
nPtr Ptr CInt
tlvlsPtr Ptr CInt
curlvlPtr Ptr CInt
curpbmPtr Ptr CInt
prmptrPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr Float
givnumPtr Ptr Float
qPtr Ptr CInt
qptrPtr Ptr Float
zPtr Ptr Float
ztempPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
z
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ztemp
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
laein ::
Bool ->
Bool ->
Array (ZeroInt,ZeroInt) Float ->
Float ->
Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Int ->
Float ->
Float ->
Float ->
IO (Array (ZeroInt,ZeroInt) Float, Int)
laein :: Bool
-> Bool
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Int
-> Float
-> Float
-> Float
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
laein Bool
rightv Bool
noinit Array (ZeroInt, ZeroInt) Float
h Float
wr Float
wi IOArray ZeroInt Float
vr IOArray ZeroInt Float
vi Int
ldb Float
eps3 Float
smlnum Float
bignum = do
let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
h
let vrDim0 :: Int
vrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vr
let viDim0 :: Int
viDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vi
let n :: Int
n = Int
hDim0
let ldh :: Int
ldh = Int
hDim1
String -> Bool -> IO ()
Call.assert String
"laein: n == vrDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vrDim0)
String -> Bool -> IO ()
Call.assert String
"laein: n == viDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
viDim0)
IOArray (ZeroInt, ZeroInt) Float
b <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldb
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
rightvPtr <- Bool -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
rightv
Ptr Bool
noinitPtr <- Bool -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
noinit
Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
hPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
h
Ptr CInt
ldhPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr Float
wrPtr <- Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
wr
Ptr Float
wiPtr <- Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
wi
Ptr Float
vrPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vr
Ptr Float
viPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vi
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr Float
eps3Ptr <- Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
eps3
Ptr Float
smlnumPtr <- Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
smlnum
Ptr Float
bignumPtr <- Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
bignum
Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laein Ptr Bool
rightvPtr Ptr Bool
noinitPtr Ptr CInt
nPtr Ptr Float
hPtr Ptr CInt
ldhPtr Ptr Float
wrPtr Ptr Float
wiPtr Ptr Float
vrPtr Ptr Float
viPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
workPtr Ptr Float
eps3Ptr Ptr Float
smlnumPtr Ptr Float
bignumPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
b
IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
laev2 ::
Float ->
Float ->
Float ->
IO (Float, Float, Float, Float)
laev2 :: Float -> Float -> Float -> IO (Float, Float, Float, Float)
laev2 Float
a Float
b Float
c = do
ContT (Float, Float, Float, Float) IO (Float, Float, Float, Float)
-> IO (Float, Float, Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float, Float, Float) IO (Float, Float, Float, Float)
-> IO (Float, Float, Float, Float))
-> ContT
(Float, Float, Float, Float) IO (Float, Float, Float, Float)
-> IO (Float, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
aPtr <- Float -> FortranIO (Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
a
Ptr Float
bPtr <- Float -> FortranIO (Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
b
Ptr Float
cPtr <- Float -> FortranIO (Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
c
Ptr Float
rt1Ptr <- FortranIO (Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
rt2Ptr <- FortranIO (Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
cs1Ptr <- FortranIO (Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
sn1Ptr <- FortranIO (Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float, Float, Float) IO ()
forall a. IO a -> ContT (Float, Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Float, Float) IO ())
-> IO () -> ContT (Float, Float, Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.laev2 Ptr Float
aPtr Ptr Float
bPtr Ptr Float
cPtr Ptr Float
rt1Ptr Ptr Float
rt2Ptr Ptr Float
cs1Ptr Ptr Float
sn1Ptr
IO (Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float) IO (Float, Float, Float, Float)
forall a. IO a -> ContT (Float, Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float) IO (Float, Float, Float, Float))
-> IO (Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float) IO (Float, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> Float -> Float -> (Float, Float, Float, Float))
-> IO
(Float -> Float -> Float -> Float -> (Float, Float, Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Float -> Float -> Float -> Float -> (Float, Float, Float, Float))
-> IO Float
-> IO (Float -> Float -> Float -> (Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rt1Ptr
IO (Float -> Float -> Float -> (Float, Float, Float, Float))
-> IO Float -> IO (Float -> Float -> (Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rt2Ptr
IO (Float -> Float -> (Float, Float, Float, Float))
-> IO Float -> IO (Float -> (Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
cs1Ptr
IO (Float -> (Float, Float, Float, Float))
-> IO Float -> IO (Float, Float, Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
sn1Ptr
laexc ::
Bool ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
IO (Int)
laexc :: Bool
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> IO Int
laexc Bool
wantq IOArray (ZeroInt, ZeroInt) Float
t IOArray (ZeroInt, ZeroInt) Float
q Int
j1 Int
n1 Int
n2 = do
let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
t
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let n :: Int
n = Int
tDim0
let ldt :: Int
ldt = Int
tDim1
let ldq :: Int
ldq = Int
qDim1
String -> Bool -> IO ()
Call.assert String
"laexc: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wantqPtr <- Bool -> FortranIO Int (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantq
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
tPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
t
Ptr CInt
ldtPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr CInt
j1Ptr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
j1
Ptr CInt
n1Ptr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n1
Ptr CInt
n2Ptr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n2
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laexc Ptr Bool
wantqPtr Ptr CInt
nPtr Ptr Float
tPtr Ptr CInt
ldtPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr CInt
j1Ptr Ptr CInt
n1Ptr Ptr CInt
n2Ptr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lag2 ::
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Float ->
IO (Float, Float, Float, Float, Float)
lag2 :: Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> IO (Float, Float, Float, Float, Float)
lag2 Array (ZeroInt, ZeroInt) Float
a Array (ZeroInt, ZeroInt) Float
b Float
safmin = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"lag2: 2 == aDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
String -> Bool -> IO ()
Call.assert String
"lag2: 2 == bDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
ContT
(Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float))
-> ContT
(Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Float, Float, Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Float, Float, Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Float, Float, Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Float, Float, Float, Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
safminPtr <- Float -> FortranIO (Float, Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
safmin
Ptr Float
scale1Ptr <- FortranIO (Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
scale2Ptr <- FortranIO (Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wr1Ptr <- FortranIO (Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wr2Ptr <- FortranIO (Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wiPtr <- FortranIO (Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float, Float, Float, Float) IO ()
forall a. IO a -> ContT (Float, Float, Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Float, Float, Float) IO ())
-> IO () -> ContT (Float, Float, Float, Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.lag2 Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
safminPtr Ptr Float
scale1Ptr Ptr Float
scale2Ptr Ptr Float
wr1Ptr Ptr Float
wr2Ptr Ptr Float
wiPtr
IO (Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float)
forall a. IO a -> ContT (Float, Float, Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float))
-> IO (Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float))
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float -> Float -> Float -> (Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scale1Ptr
IO
(Float
-> Float -> Float -> Float -> (Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float -> Float -> Float -> (Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scale2Ptr
IO (Float -> Float -> Float -> (Float, Float, Float, Float, Float))
-> IO Float
-> IO (Float -> Float -> (Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
wr1Ptr
IO (Float -> Float -> (Float, Float, Float, Float, Float))
-> IO Float -> IO (Float -> (Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
wr2Ptr
IO (Float -> (Float, Float, Float, Float, Float))
-> IO Float -> IO (Float, Float, Float, Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
wiPtr
lag2d ::
Int ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Double, Int)
lag2d :: Int
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
lag2d Int
m Array (ZeroInt, ZeroInt) Float
sa Int
lda = do
let (Int
saDim0,Int
saDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
sa
let n :: Int
n = Int
saDim0
let ldsa :: Int
ldsa = Int
saDim1
IOArray (ZeroInt, ZeroInt) Double
a <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
lda
ContT
(Array (ZeroInt, ZeroInt) Double, Int)
IO
(Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Double, Int)
IO
(Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Double, Int)
IO
(Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
saPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
sa
Ptr CInt
ldsaPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldsa
Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lag2d Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
saPtr Ptr CInt
ldsaPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Double, Int)
IO
(Array (ZeroInt, ZeroInt) Double, Int)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Double, Int)
IO
(Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Double, Int)
IO
(Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
-> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO
(Array (ZeroInt, ZeroInt) Double
-> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) Double
-> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array (ZeroInt, ZeroInt) Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Double
a
IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lags2 ::
Bool ->
Float ->
Float ->
Float ->
Float ->
Float ->
Float ->
IO (Float, Float, Float, Float, Float, Float)
lags2 :: Bool
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> IO (Float, Float, Float, Float, Float, Float)
lags2 Bool
upper Float
a1 Float
a2 Float
a3 Float
b1 Float
b2 Float
b3 = do
ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float, Float))
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
upperPtr <- Bool
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
upper
Ptr Float
a1Ptr <- Float
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
a1
Ptr Float
a2Ptr <- Float
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
a2
Ptr Float
a3Ptr <- Float
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
a3
Ptr Float
b1Ptr <- Float
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
b1
Ptr Float
b2Ptr <- Float
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
b2
Ptr Float
b3Ptr <- Float
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
b3
Ptr Float
csuPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
snuPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
csvPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
snvPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
csqPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
snqPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float, Float, Float, Float, Float) IO ()
forall a.
IO a -> ContT (Float, Float, Float, Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Float, Float, Float, Float) IO ())
-> IO () -> ContT (Float, Float, Float, Float, Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.lags2 Ptr Bool
upperPtr Ptr Float
a1Ptr Ptr Float
a2Ptr Ptr Float
a3Ptr Ptr Float
b1Ptr Ptr Float
b2Ptr Ptr Float
b3Ptr Ptr Float
csuPtr Ptr Float
snuPtr Ptr Float
csvPtr Ptr Float
snvPtr Ptr Float
csqPtr Ptr Float
snqPtr
IO (Float, Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
forall a.
IO a -> ContT (Float, Float, Float, Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float))
-> IO (Float, Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
csuPtr
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
snuPtr
IO
(Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float -> Float -> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
csvPtr
IO
(Float
-> Float -> Float -> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float -> Float -> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
snvPtr
IO (Float -> Float -> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO (Float -> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
csqPtr
IO (Float -> (Float, Float, Float, Float, Float, Float))
-> IO Float -> IO (Float, Float, Float, Float, Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
snqPtr
lagtf ::
IOArray ZeroInt Float ->
Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Float ->
IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
lagtf :: IOArray ZeroInt Float
-> Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
lagtf IOArray ZeroInt Float
a Float
lambda IOArray ZeroInt Float
b IOArray ZeroInt Float
c Float
tol = do
let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
a
let bDim0 :: Int
bDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
b
let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
c
let n :: Int
n = Int
aDim0
String -> Bool -> IO ()
Call.assert String
"lagtf: n-1 == bDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
String -> Bool -> IO ()
Call.assert String
"lagtf: n-1 == cDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2)
IOArray ZeroInt CInt
in_ <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
a
Ptr Float
lambdaPtr <- Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
lambda
Ptr Float
bPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b
Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
Ptr Float
tolPtr <- Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tol
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr CInt
in_Ptr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
in_
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Array ZeroInt CInt, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt CInt, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lagtf Ptr CInt
nPtr Ptr Float
aPtr Ptr Float
lambdaPtr Ptr Float
bPtr Ptr Float
cPtr Ptr Float
tolPtr Ptr Float
dPtr Ptr CInt
in_Ptr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt CInt, Int)
IO
(Array ZeroInt Float, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Int
-> (Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt CInt
-> Int -> (Array ZeroInt Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
IO
(Array ZeroInt CInt
-> Int -> (Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
in_
IO (Int -> (Array ZeroInt Float, Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lagtm ::
Char ->
Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array (ZeroInt,ZeroInt) Float ->
Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO ()
lagtm :: Char
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO ()
lagtm Char
trans Float
alpha Array ZeroInt Float
dl Array ZeroInt Float
d Array ZeroInt Float
du Array (ZeroInt, ZeroInt) Float
x Float
beta IOArray (ZeroInt, ZeroInt) Float
b = do
let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
dl
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
du
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
x
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
dDim0
let nrhs :: Int
nrhs = Int
xDim0
let ldx :: Int
ldx = Int
xDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"lagtm: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
String -> Bool -> IO ()
Call.assert String
"lagtm: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
String -> Bool -> IO ()
Call.assert String
"lagtm: nrhs == bDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
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
$ do
Ptr CChar
transPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
alphaPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
alpha
Ptr Float
dlPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
dl
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
duPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
du
Ptr Float
xPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
betaPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
beta
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lagtm Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
alphaPtr Ptr Float
dlPtr Ptr Float
dPtr Ptr Float
duPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
betaPtr Ptr Float
bPtr Ptr CInt
ldbPtr
lagts ::
Int ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt CInt ->
IOArray ZeroInt Float ->
Float ->
IO (Float, Int)
lagts :: Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> IOArray ZeroInt Float
-> Float
-> IO (Float, Int)
lagts Int
job Array ZeroInt Float
a Array ZeroInt Float
b Array ZeroInt Float
c Array ZeroInt Float
d Array ZeroInt CInt
in_ IOArray ZeroInt Float
y Float
tol = do
let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
a
let bDim0 :: Int
bDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
b
let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
c
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let in_Dim0 :: Int
in_Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
in_
let yDim0 :: Int
yDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
y
let n :: Int
n = Int
aDim0
String -> Bool -> IO ()
Call.assert String
"lagts: n-1 == bDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
String -> Bool -> IO ()
Call.assert String
"lagts: n-1 == cDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
String -> Bool -> IO ()
Call.assert String
"lagts: n-2 == dDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
String -> Bool -> IO ()
Call.assert String
"lagts: n == in_Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
in_Dim0)
String -> Bool -> IO ()
Call.assert String
"lagts: n == yDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
yDim0)
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
jobPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
job
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
a
Ptr Float
bPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
b
Ptr Float
cPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
c
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr CInt
in_Ptr <- Array ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
in_
Ptr Float
yPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
y
Ptr Float
tolPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tol
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lagts Ptr CInt
jobPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr Float
bPtr Ptr Float
cPtr Ptr Float
dPtr Ptr CInt
in_Ptr Ptr Float
yPtr Ptr Float
tolPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
tolPtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lagv2 ::
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Float)
lagv2 :: IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
lagv2 IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"lagv2: 2 == aDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
String -> Bool -> IO ()
Call.assert String
"lagv2: 2 == bDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray ZeroInt Float
alphar <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
IOArray ZeroInt Float
alphai <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
IOArray ZeroInt Float
beta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
alpharPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alphar
Ptr Float
alphaiPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alphai
Ptr Float
betaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
beta
Ptr Float
cslPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
snlPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
csrPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
snrPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.lagv2 Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
alpharPtr Ptr Float
alphaiPtr Ptr Float
betaPtr Ptr Float
cslPtr Ptr Float
snlPtr Ptr Float
csrPtr Ptr Float
snrPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alphar
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Float
-> Float
-> Float
-> Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alphai
IO
(Array ZeroInt Float
-> Float
-> Float
-> Float
-> Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
-> IO (Array ZeroInt Float)
-> IO
(Float
-> Float
-> Float
-> Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
beta
IO
(Float
-> Float
-> Float
-> Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
cslPtr
IO
(Float
-> Float
-> Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
snlPtr
IO
(Float
-> Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
csrPtr
IO
(Float
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float))
-> IO Float
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Float, Float, Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
snrPtr
lahqr ::
Bool ->
Bool ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
lahqr :: Bool
-> Bool
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
lahqr Bool
wantt Bool
wantz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) Float
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) Float
z = do
let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
h
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let n :: Int
n = Int
hDim0
let ldh :: Int
ldh = Int
hDim1
let ldz :: Int
ldz = Int
zDim1
String -> Bool -> IO ()
Call.assert String
"lahqr: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
wr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
wi <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wanttPtr <- Bool
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
Ptr Bool
wantzPtr <- Bool
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr Float
hPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
h
Ptr CInt
ldhPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr Float
wrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wr
Ptr Float
wiPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wi
Ptr CInt
ilozPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
Ptr CInt
ihizPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lahqr Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
hPtr Ptr CInt
ldhPtr Ptr Float
wrPtr Ptr Float
wiPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wi
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lahr2 ::
Int ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float)
lahr2 :: Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
lahr2 Int
n Int
k Int
nb IOArray (ZeroInt, ZeroInt) Float
a Int
ldt Int
ldy = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"lahr2: n-k+1 == aDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
kInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
IOArray (ZeroInt, ZeroInt) Float
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldt
IOArray (ZeroInt, ZeroInt) Float
y <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldy
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr CInt
nbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
tPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
t
Ptr CInt
ldtPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr Float
yPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
y
Ptr CInt
ldyPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldy
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lahr2 Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
nbPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
tPtr Ptr CInt
ldtPtr Ptr Float
yPtr Ptr CInt
ldyPtr
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
t
IO
(Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
y
laic1 ::
Int ->
Array ZeroInt Float ->
Float ->
Array ZeroInt Float ->
Float ->
IO (Float, Float, Float)
laic1 :: Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Float
-> IO (Float, Float, Float)
laic1 Int
job Array ZeroInt Float
x Float
sest Array ZeroInt Float
w Float
gamma = do
let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
x
let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
w
let j :: Int
j = Int
xDim0
String -> Bool -> IO ()
Call.assert String
"laic1: j == wDim0" (Int
j Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
ContT (Float, Float, Float) IO (Float, Float, Float)
-> IO (Float, Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float, Float) IO (Float, Float, Float)
-> IO (Float, Float, Float))
-> ContT (Float, Float, Float) IO (Float, Float, Float)
-> IO (Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
jobPtr <- Int -> FortranIO (Float, Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
job
Ptr CInt
jPtr <- Int -> FortranIO (Float, Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
j
Ptr Float
xPtr <- Array ZeroInt Float -> FortranIO (Float, Float, Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
x
Ptr Float
sestPtr <- Float -> FortranIO (Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sest
Ptr Float
wPtr <- Array ZeroInt Float -> FortranIO (Float, Float, Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
w
Ptr Float
gammaPtr <- Float -> FortranIO (Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
gamma
Ptr Float
sestprPtr <- FortranIO (Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
sPtr <- FortranIO (Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
cPtr <- FortranIO (Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float, Float) IO ()
forall a. IO a -> ContT (Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Float) IO ())
-> IO () -> ContT (Float, Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.laic1 Ptr CInt
jobPtr Ptr CInt
jPtr Ptr Float
xPtr Ptr Float
sestPtr Ptr Float
wPtr Ptr Float
gammaPtr Ptr Float
sestprPtr Ptr Float
sPtr Ptr Float
cPtr
IO (Float, Float, Float)
-> ContT (Float, Float, Float) IO (Float, Float, Float)
forall a. IO a -> ContT (Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Float)
-> ContT (Float, Float, Float) IO (Float, Float, Float))
-> IO (Float, Float, Float)
-> ContT (Float, Float, Float) IO (Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> Float -> (Float, Float, Float))
-> IO (Float -> Float -> Float -> (Float, Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO (Float -> Float -> Float -> (Float, Float, Float))
-> IO Float -> IO (Float -> Float -> (Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
sestprPtr
IO (Float -> Float -> (Float, Float, Float))
-> IO Float -> IO (Float -> (Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
sPtr
IO (Float -> (Float, Float, Float))
-> IO Float -> IO (Float, Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
cPtr
laisnan ::
Float ->
Float ->
IO Bool
laisnan :: Float -> Float -> IO Bool
laisnan Float
sin1 Float
sin2 = do
ContT Bool IO Bool -> IO Bool
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Bool IO Bool -> IO Bool) -> ContT Bool IO Bool -> IO Bool
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
sin1Ptr <- Float -> FortranIO Bool (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sin1
Ptr Float
sin2Ptr <- Float -> FortranIO Bool (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sin2
IO Bool -> ContT Bool IO Bool
forall a. IO a -> ContT Bool IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> ContT Bool IO Bool) -> IO Bool -> ContT Bool IO Bool
forall a b. (a -> b) -> a -> b
$ Ptr Float -> Ptr Float -> IO Bool
FFI.laisnan Ptr Float
sin1Ptr Ptr Float
sin2Ptr
laln2 ::
Bool ->
Float ->
Float ->
Array (ZeroInt,ZeroInt) Float ->
Float ->
Float ->
Array (ZeroInt,ZeroInt) Float ->
Float ->
Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Float, Float, Int)
laln2 :: Bool
-> Float
-> Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
laln2 Bool
ltrans Float
smin Float
ca Array (ZeroInt, ZeroInt) Float
a Float
d1 Float
d2 Array (ZeroInt, ZeroInt) Float
b Float
wr Float
wi Int
ldx = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let na :: Int
na = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nw :: Int
nw = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
IOArray (ZeroInt, ZeroInt) Float
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldx
ContT
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
ltransPtr <- Bool
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
ltrans
Ptr CInt
naPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
na
Ptr CInt
nwPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nw
Ptr Float
sminPtr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
smin
Ptr Float
caPtr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
ca
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
d1Ptr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
d1
Ptr Float
d2Ptr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
d2
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
wrPtr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
wr
Ptr Float
wiPtr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
wi
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
scalePtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
xnormPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array (ZeroInt, ZeroInt) Float, Float, Float, Int) IO ()
forall a.
IO a
-> ContT (Array (ZeroInt, ZeroInt) Float, Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array (ZeroInt, ZeroInt) Float, Float, Float, Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) Float, Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laln2 Ptr Bool
ltransPtr Ptr CInt
naPtr Ptr CInt
nwPtr Ptr Float
sminPtr Ptr Float
caPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
d1Ptr Ptr Float
d2Ptr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
wrPtr Ptr Float
wiPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
scalePtr Ptr Float
xnormPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
forall a.
IO a
-> ContT (Array (ZeroInt, ZeroInt) Float, Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Float
-> Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
x
IO
(Float
-> Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO Float
-> IO
(Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
IO
(Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO Float
-> IO (Int -> (Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
xnormPtr
IO (Int -> (Array (ZeroInt, ZeroInt) Float, Float, Float, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Float, Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lals0 ::
Int ->
Int ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Array ZeroInt CInt ->
Int ->
Array (ZeroInt,ZeroInt) CInt ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Float ->
Float ->
IO (Array (ZeroInt,ZeroInt) Float, Int)
lals0 :: Int
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Float
-> Float
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
lals0 Int
icompq Int
nl Int
nr Int
sqre IOArray (ZeroInt, ZeroInt) Float
b Int
ldbx Array ZeroInt CInt
perm Int
givptr Array (ZeroInt, ZeroInt) CInt
givcol Array (ZeroInt, ZeroInt) Float
givnum Array (ZeroInt, ZeroInt) Float
poles Array ZeroInt Float
difl Array (ZeroInt, ZeroInt) Float
difr Array ZeroInt Float
z Float
c Float
s = do
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let permDim0 :: Int
permDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
perm
let (Int
givcolDim0,Int
givcolDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) CInt -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) CInt
givcol
let (Int
givnumDim0,Int
givnumDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
givnum
let (Int
polesDim0,Int
polesDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
poles
let diflDim0 :: Int
diflDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
difl
let (Int
difrDim0,Int
difrDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
difr
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
z
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let _n :: Int
_n = Int
permDim0
let ldgcol :: Int
ldgcol = Int
givcolDim1
let ldgnum :: Int
ldgnum = Int
givnumDim1
let k :: Int
k = Int
diflDim0
String -> Bool -> IO ()
Call.assert String
"lals0: 2 == givcolDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givcolDim0)
String -> Bool -> IO ()
Call.assert String
"lals0: 2 == givnumDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givnumDim0)
String -> Bool -> IO ()
Call.assert String
"lals0: 2 == polesDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
polesDim0)
String -> Bool -> IO ()
Call.assert String
"lals0: ldgnum == polesDim1" (Int
ldgnum Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
polesDim1)
String -> Bool -> IO ()
Call.assert String
"lals0: 2 == difrDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
difrDim0)
String -> Bool -> IO ()
Call.assert String
"lals0: ldgnum == difrDim1" (Int
ldgnum Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
difrDim1)
String -> Bool -> IO ()
Call.assert String
"lals0: k == zDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray (ZeroInt, ZeroInt) Float
bx <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldbx
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
k
ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
icompqPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
Ptr CInt
nlPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nl
Ptr CInt
nrPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nr
Ptr CInt
sqrePtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
Ptr CInt
nrhsPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
bxPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
bx
Ptr CInt
ldbxPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbx
Ptr CInt
permPtr <- Array ZeroInt CInt
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
perm
Ptr CInt
givptrPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
givptr
Ptr CInt
givcolPtr <- Array (ZeroInt, ZeroInt) CInt
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) CInt
givcol
Ptr CInt
ldgcolPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgcol
Ptr Float
givnumPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
givnum
Ptr CInt
ldgnumPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgnum
Ptr Float
polesPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
poles
Ptr Float
diflPtr <- Array ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
difl
Ptr Float
difrPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
difr
Ptr Float
zPtr <- Array ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
z
Ptr CInt
kPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
cPtr <- Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
c
Ptr Float
sPtr <- Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
s
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lals0 Ptr CInt
icompqPtr Ptr CInt
nlPtr Ptr CInt
nrPtr Ptr CInt
sqrePtr Ptr CInt
nrhsPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
bxPtr Ptr CInt
ldbxPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr CInt
ldgcolPtr Ptr Float
givnumPtr Ptr CInt
ldgnumPtr Ptr Float
polesPtr Ptr Float
diflPtr Ptr Float
difrPtr Ptr Float
zPtr Ptr CInt
kPtr Ptr Float
cPtr Ptr Float
sPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
bx
IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lalsa ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) CInt ->
Array (ZeroInt,ZeroInt) CInt ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
IO (Array (ZeroInt,ZeroInt) Float, Int)
lalsa :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
lalsa Int
icompq IOArray (ZeroInt, ZeroInt) Float
b Int
ldbx Array (ZeroInt, ZeroInt) Float
u Array (ZeroInt, ZeroInt) Float
vt Array ZeroInt CInt
k Array (ZeroInt, ZeroInt) Float
difl Array (ZeroInt, ZeroInt) Float
difr Array (ZeroInt, ZeroInt) Float
z Array (ZeroInt, ZeroInt) Float
poles Array ZeroInt CInt
givptr Array (ZeroInt, ZeroInt) CInt
givcol Array (ZeroInt, ZeroInt) CInt
perm Array (ZeroInt, ZeroInt) Float
givnum Array ZeroInt Float
c Array ZeroInt Float
s = do
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let (Int
uDim0,Int
uDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
u
let (Int
vtDim0,Int
vtDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
vt
let kDim0 :: Int
kDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
k
let (Int
diflDim0,Int
diflDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
difl
let (Int
difrDim0,Int
difrDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
difr
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
z
let (Int
polesDim0,Int
polesDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
poles
let givptrDim0 :: Int
givptrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
givptr
let (Int
givcolDim0,Int
givcolDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) CInt -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) CInt
givcol
let (Int
permDim0,Int
permDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) CInt -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) CInt
perm
let (Int
givnumDim0,Int
givnumDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
givnum
let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
c
let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
s
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let smlsiz :: Int
smlsiz = Int
uDim0
let ldu :: Int
ldu = Int
uDim1
let n :: Int
n = Int
kDim0
let nlvl :: Int
nlvl = Int
diflDim0
let ldgcol :: Int
ldgcol = Int
givcolDim1
String -> Bool -> IO ()
Call.assert String
"lalsa: smlsiz+1 == vtDim0" (Int
smlsizInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vtDim0)
String -> Bool -> IO ()
Call.assert String
"lalsa: ldu == vtDim1" (Int
ldu Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vtDim1)
String -> Bool -> IO ()
Call.assert String
"lalsa: ldu == diflDim1" (Int
ldu Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
diflDim1)
String -> Bool -> IO ()
Call.assert String
"lalsa: 2*nlvl == difrDim0" (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nlvl Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
difrDim0)
String -> Bool -> IO ()
Call.assert String
"lalsa: ldu == difrDim1" (Int
ldu Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
difrDim1)
String -> Bool -> IO ()
Call.assert String
"lalsa: nlvl == zDim0" (Int
nlvl Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
String -> Bool -> IO ()
Call.assert String
"lalsa: ldu == zDim1" (Int
ldu Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim1)
String -> Bool -> IO ()
Call.assert String
"lalsa: 2*nlvl == polesDim0" (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nlvl Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
polesDim0)
String -> Bool -> IO ()
Call.assert String
"lalsa: ldu == polesDim1" (Int
ldu Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
polesDim1)
String -> Bool -> IO ()
Call.assert String
"lalsa: n == givptrDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givptrDim0)
String -> Bool -> IO ()
Call.assert String
"lalsa: 2*nlvl == givcolDim0" (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nlvl Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givcolDim0)
String -> Bool -> IO ()
Call.assert String
"lalsa: nlvl == permDim0" (Int
nlvl Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
permDim0)
String -> Bool -> IO ()
Call.assert String
"lalsa: ldgcol == permDim1" (Int
ldgcol Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
permDim1)
String -> Bool -> IO ()
Call.assert String
"lalsa: 2*nlvl == givnumDim0" (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nlvl Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givnumDim0)
String -> Bool -> IO ()
Call.assert String
"lalsa: ldu == givnumDim1" (Int
ldu Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givnumDim1)
String -> Bool -> IO ()
Call.assert String
"lalsa: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
String -> Bool -> IO ()
Call.assert String
"lalsa: n == sDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
IOArray (ZeroInt, ZeroInt) Float
bx <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldbx
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
icompqPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
Ptr CInt
smlsizPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
smlsiz
Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
bxPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
bx
Ptr CInt
ldbxPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbx
Ptr Float
uPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
u
Ptr CInt
lduPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr Float
vtPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
vt
Ptr CInt
kPtr <- Array ZeroInt CInt
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
k
Ptr Float
diflPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
difl
Ptr Float
difrPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
difr
Ptr Float
zPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
z
Ptr Float
polesPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
poles
Ptr CInt
givptrPtr <- Array ZeroInt CInt
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
givptr
Ptr CInt
givcolPtr <- Array (ZeroInt, ZeroInt) CInt
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) CInt
givcol
Ptr CInt
ldgcolPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgcol
Ptr CInt
permPtr <- Array (ZeroInt, ZeroInt) CInt
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) CInt
perm
Ptr Float
givnumPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
givnum
Ptr Float
cPtr <- Array ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
c
Ptr Float
sPtr <- Array ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
s
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lalsa Ptr CInt
icompqPtr Ptr CInt
smlsizPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
bxPtr Ptr CInt
ldbxPtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr Float
vtPtr Ptr CInt
kPtr Ptr Float
diflPtr Ptr Float
difrPtr Ptr Float
zPtr Ptr Float
polesPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr CInt
ldgcolPtr Ptr CInt
permPtr Ptr Float
givnumPtr Ptr Float
cPtr Ptr Float
sPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
bx
IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lalsd ::
Char ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Float ->
Int ->
Int ->
IO (Int, Int)
lalsd :: Char
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Float
-> Int
-> Int
-> IO (Int, Int)
lalsd Char
uplo Int
smlsiz IOArray ZeroInt Float
d IOArray ZeroInt Float
e IOArray (ZeroInt, ZeroInt) Float
b Float
rcond Int
workSize Int
iworkSize = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
dDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"lalsd: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
iworkSize
ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int) IO (Int, Int) -> IO (Int, Int))
-> ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
smlsizPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
smlsiz
Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
rcondPtr <- Float -> FortranIO (Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rcond
Ptr CInt
rankPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Int, Int) IO ()
forall a. IO a -> ContT (Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int) IO ())
-> IO () -> ContT (Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lalsd Ptr CChar
uploPtr Ptr CInt
smlsizPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
rcondPtr Ptr CInt
rankPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
forall a. IO a -> ContT (Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int) -> ContT (Int, Int) IO (Int, Int))
-> IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ (Int -> Int -> (Int, Int)) -> IO (Int -> Int -> (Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Int -> Int -> (Int, Int)) -> IO Int -> IO (Int -> (Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
rankPtr)
IO (Int -> (Int, Int)) -> IO Int -> IO (Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lamrg ::
Int ->
Int ->
Array ZeroInt Float ->
Int ->
Int ->
IO (Array ZeroInt CInt)
lamrg :: Int
-> Int
-> Array ZeroInt Float
-> Int
-> Int
-> IO (Array ZeroInt CInt)
lamrg Int
n1 Int
n2 Array ZeroInt Float
a Int
strd1 Int
strd2 = do
let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
a
String -> Bool -> IO ()
Call.assert String
"lamrg: n1+n2 == aDim0" (Int
n1Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
n2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
IOArray ZeroInt CInt
index <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
n1Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
n2)
ContT (Array ZeroInt CInt) IO (Array ZeroInt CInt)
-> IO (Array ZeroInt CInt)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt) IO (Array ZeroInt CInt)
-> IO (Array ZeroInt CInt))
-> ContT (Array ZeroInt CInt) IO (Array ZeroInt CInt)
-> IO (Array ZeroInt CInt)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
n1Ptr <- Int -> FortranIO (Array ZeroInt CInt) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n1
Ptr CInt
n2Ptr <- Int -> FortranIO (Array ZeroInt CInt) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n2
Ptr Float
aPtr <- Array ZeroInt Float -> FortranIO (Array ZeroInt CInt) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
a
Ptr CInt
strd1Ptr <- Int -> FortranIO (Array ZeroInt CInt) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
strd1
Ptr CInt
strd2Ptr <- Int -> FortranIO (Array ZeroInt CInt) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
strd2
Ptr CInt
indexPtr <- IOArray ZeroInt CInt -> FortranIO (Array ZeroInt CInt) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
index
IO () -> ContT (Array ZeroInt CInt) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt) IO ())
-> IO () -> ContT (Array ZeroInt CInt) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lamrg Ptr CInt
n1Ptr Ptr CInt
n2Ptr Ptr Float
aPtr Ptr CInt
strd1Ptr Ptr CInt
strd2Ptr Ptr CInt
indexPtr
IO (Array ZeroInt CInt)
-> ContT (Array ZeroInt CInt) IO (Array ZeroInt CInt)
forall a. IO a -> ContT (Array ZeroInt CInt) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt)
-> ContT (Array ZeroInt CInt) IO (Array ZeroInt CInt))
-> IO (Array ZeroInt CInt)
-> ContT (Array ZeroInt CInt) IO (Array ZeroInt CInt)
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
index
laneg ::
Array ZeroInt Float ->
Array ZeroInt Float ->
Float ->
Float ->
Int ->
IO CInt
laneg :: Array ZeroInt Float
-> Array ZeroInt Float -> Float -> Float -> Int -> IO CInt
laneg Array ZeroInt Float
d Array ZeroInt Float
lld Float
sigma Float
pivmin Int
r = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let lldDim0 :: Int
lldDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
lld
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"laneg: n-1 == lldDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
lldDim0)
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
nPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO CInt (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
lldPtr <- Array ZeroInt Float -> FortranIO CInt (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
lld
Ptr Float
sigmaPtr <- Float -> FortranIO CInt (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sigma
Ptr Float
pivminPtr <- Float -> FortranIO CInt (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
pivmin
Ptr CInt
rPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
r
IO CInt -> ContT CInt IO CInt
forall a. IO a -> ContT CInt IO a
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
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO CInt
FFI.laneg Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
lldPtr Ptr Float
sigmaPtr Ptr Float
pivminPtr Ptr CInt
rPtr
langb ::
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO Float
langb :: Char
-> Int -> Int -> Array (ZeroInt, ZeroInt) Float -> Int -> IO Float
langb Char
norm Int
kl Int
ku Array (ZeroInt, ZeroInt) Float
ab Int
lwork = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.langb Ptr CChar
normPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
workPtr
lange ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO Float
lange :: Char -> Int -> Array (ZeroInt, ZeroInt) Float -> Int -> IO Float
lange Char
norm Int
m Array (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
mPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.lange Ptr CChar
normPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
workPtr
langt ::
Char ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
IO Float
langt :: Char
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> IO Float
langt Char
norm Array ZeroInt Float
dl Array ZeroInt Float
d Array ZeroInt Float
du = do
let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
dl
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
du
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"langt: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
String -> Bool -> IO ()
Call.assert String
"langt: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dlPtr <- Array ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
dl
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
duPtr <- Array ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
du
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt -> Ptr Float -> Ptr Float -> Ptr Float -> IO Float
FFI.langt Ptr CChar
normPtr Ptr CInt
nPtr Ptr Float
dlPtr Ptr Float
dPtr Ptr Float
duPtr
lanhs ::
Char ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO Float
lanhs :: Char -> Array (ZeroInt, ZeroInt) Float -> Int -> IO Float
lanhs Char
norm Array (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt -> Ptr Float -> Ptr CInt -> Ptr Float -> IO Float
FFI.lanhs Ptr CChar
normPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
workPtr
lansb ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO Float
lansb :: Char
-> Char -> Int -> Array (ZeroInt, ZeroInt) Float -> Int -> IO Float
lansb Char
norm Char
uplo Int
k Array (ZeroInt, ZeroInt) Float
ab Int
lwork = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.lansb Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
workPtr
lansf ::
Char ->
Char ->
Char ->
Int ->
Array ZeroInt Float ->
Int ->
IO Float
lansf :: Char
-> Char -> Char -> Int -> Array ZeroInt Float -> Int -> IO Float
lansf Char
norm Char
transr Char
uplo Int
n Array ZeroInt Float
a Int
lwork = do
let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
a
String -> Bool -> IO ()
Call.assert String
"lansf: n*(n+1)`div`2 == aDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
transrPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
a
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> IO Float
FFI.lansf Ptr CChar
normPtr Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr Float
workPtr
lansp ::
Char ->
Char ->
Int ->
Array ZeroInt Float ->
Int ->
IO Float
lansp :: Char -> Char -> Int -> Array ZeroInt Float -> Int -> IO Float
lansp Char
norm Char
uplo Int
n Array ZeroInt Float
ap Int
lwork = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"lansp: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- Array ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar -> Ptr CInt -> Ptr Float -> Ptr Float -> IO Float
FFI.lansp Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
workPtr
lanst ::
Char ->
Array ZeroInt Float ->
Array ZeroInt Float ->
IO Float
lanst :: Char -> Array ZeroInt Float -> Array ZeroInt Float -> IO Float
lanst Char
norm Array ZeroInt Float
d Array ZeroInt Float
e = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"lanst: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
ePtr <- Array ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> Ptr CInt -> Ptr Float -> Ptr Float -> IO Float
FFI.lanst Ptr CChar
normPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr
lansy ::
Char ->
Char ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO Float
lansy :: Char -> Char -> Array (ZeroInt, ZeroInt) Float -> Int -> IO Float
lansy Char
norm Char
uplo Array (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.lansy Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
workPtr
lantb ::
Char ->
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO Float
lantb :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> IO Float
lantb Char
norm Char
uplo Char
diag Int
k Array (ZeroInt, ZeroInt) Float
ab Int
lwork = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.lantb Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
workPtr
lantp ::
Char ->
Char ->
Char ->
Int ->
Array ZeroInt Float ->
Int ->
IO Float
lantp :: Char
-> Char -> Char -> Int -> Array ZeroInt Float -> Int -> IO Float
lantp Char
norm Char
uplo Char
diag Int
n Array ZeroInt Float
ap Int
lwork = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"lantp: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- Array ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> IO Float
FFI.lantp Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
workPtr
lantr ::
Char ->
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO Float
lantr :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> IO Float
lantr Char
norm Char
uplo Char
diag Int
m Array (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
mPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.lantr Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
workPtr
lanv2 ::
Float ->
Float ->
Float ->
Float ->
IO (Float, Float, Float, Float, Float, Float, Float, Float, Float, Float)
lanv2 :: Float
-> Float
-> Float
-> Float
-> IO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
lanv2 Float
a Float
b Float
c Float
d = do
ContT
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
IO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
-> IO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
IO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
-> IO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
-> ContT
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
IO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
-> IO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
aPtr <- Float
-> FortranIO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
a
Ptr Float
bPtr <- Float
-> FortranIO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
b
Ptr Float
cPtr <- Float
-> FortranIO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
c
Ptr Float
dPtr <- Float
-> FortranIO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
d
Ptr Float
rt1rPtr <- FortranIO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
rt1iPtr <- FortranIO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
rt2rPtr <- FortranIO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
rt2iPtr <- FortranIO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
csPtr <- FortranIO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
snPtr <- FortranIO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
IO
()
forall a.
IO a
-> ContT
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
IO
())
-> IO ()
-> ContT
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.lanv2 Ptr Float
aPtr Ptr Float
bPtr Ptr Float
cPtr Ptr Float
dPtr Ptr Float
rt1rPtr Ptr Float
rt1iPtr Ptr Float
rt2rPtr Ptr Float
rt2iPtr Ptr Float
csPtr Ptr Float
snPtr
IO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
-> ContT
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
IO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
forall a.
IO a
-> ContT
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
-> ContT
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
IO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
-> IO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
-> ContT
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
IO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
forall a b. (a -> b) -> a -> b
$ (Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,)
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
aPtr
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
bPtr
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
cPtr
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dPtr
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rt1rPtr
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rt1iPtr
IO
(Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rt2rPtr
IO
(Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
-> IO Float
-> IO
(Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rt2iPtr
IO
(Float
-> Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
-> IO Float
-> IO
(Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
csPtr
IO
(Float
-> (Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float))
-> IO Float
-> IO
(Float, Float, Float, Float, Float, Float, Float, Float, Float,
Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
snPtr
lapll ::
Int ->
IOArray ZeroInt Float ->
Int ->
IOArray ZeroInt Float ->
Int ->
IO (Float)
lapll :: Int
-> IOArray ZeroInt Float
-> Int
-> IOArray ZeroInt Float
-> Int
-> IO Float
lapll Int
n IOArray ZeroInt Float
x Int
incx IOArray ZeroInt Float
y Int
incy = do
let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
x
let yDim0 :: Int
yDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
y
let _xSize :: Int
_xSize = Int
xDim0
let _ySize :: Int
_ySize = Int
yDim0
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
xPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
Ptr CInt
incxPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr Float
yPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
y
Ptr CInt
incyPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
Ptr Float
ssminPtr <- FortranIO Float (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Float IO ()
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Float IO ()) -> IO () -> ContT Float IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> IO ()
FFI.lapll Ptr CInt
nPtr Ptr Float
xPtr Ptr CInt
incxPtr Ptr Float
yPtr Ptr CInt
incyPtr Ptr Float
ssminPtr
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
ssminPtr
lapmr ::
Bool ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt CInt ->
IO ()
lapmr :: Bool
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt CInt
-> IO ()
lapmr Bool
forwrd IOArray (ZeroInt, ZeroInt) Float
x IOArray ZeroInt CInt
k = do
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x
let kDim0 :: Int
kDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
k
let n :: Int
n = Int
xDim0
let ldx :: Int
ldx = Int
xDim1
let m :: Int
m = Int
kDim0
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
$ do
Ptr Bool
forwrdPtr <- Bool -> FortranIO () (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
forwrd
Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr CInt
kPtr <- IOArray ZeroInt CInt -> FortranIO () (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
k
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lapmr Ptr Bool
forwrdPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr CInt
kPtr
lapmt ::
Bool ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt CInt ->
IO ()
lapmt :: Bool
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt CInt
-> IO ()
lapmt Bool
forwrd Int
m IOArray (ZeroInt, ZeroInt) Float
x IOArray ZeroInt CInt
k = do
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x
let kDim0 :: Int
kDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
k
let n :: Int
n = Int
xDim0
let ldx :: Int
ldx = Int
xDim1
String -> Bool -> IO ()
Call.assert String
"lapmt: n == kDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
kDim0)
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
$ do
Ptr Bool
forwrdPtr <- Bool -> FortranIO () (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
forwrd
Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr CInt
kPtr <- IOArray ZeroInt CInt -> FortranIO () (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
k
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lapmt Ptr Bool
forwrdPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr CInt
kPtr
lapy2 ::
Float ->
Float ->
IO Float
lapy2 :: Float -> Float -> IO Float
lapy2 Float
x Float
y = do
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
xPtr <- Float -> FortranIO Float (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
x
Ptr Float
yPtr <- Float -> FortranIO Float (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
y
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr Float -> Ptr Float -> IO Float
FFI.lapy2 Ptr Float
xPtr Ptr Float
yPtr
lapy3 ::
Float ->
Float ->
Float ->
IO Float
lapy3 :: Float -> Float -> Float -> IO Float
lapy3 Float
x Float
y Float
z = do
ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
xPtr <- Float -> FortranIO Float (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
x
Ptr Float
yPtr <- Float -> FortranIO Float (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
y
Ptr Float
zPtr <- Float -> FortranIO Float (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
z
IO Float -> ContT Float IO Float
forall a. IO a -> ContT Float IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr Float -> Ptr Float -> Ptr Float -> IO Float
FFI.lapy3 Ptr Float
xPtr Ptr Float
yPtr Ptr Float
zPtr
laqgb ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Float ->
Float ->
Float ->
IO (Char)
laqgb :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> IO Char
laqgb Int
kl Int
ku IOArray (ZeroInt, ZeroInt) Float
ab Array ZeroInt Float
r Array ZeroInt Float
c Float
rowcnd Float
colcnd Float
amax = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let rDim0 :: Int
rDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
r
let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
c
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let m :: Int
m = Int
rDim0
String -> Bool -> IO ()
Call.assert String
"laqgb: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
ContT Char IO Char -> IO Char
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Char IO Char -> IO Char) -> ContT Char IO Char -> IO Char
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
rPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
r
Ptr Float
cPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
c
Ptr Float
rowcndPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rowcnd
Ptr Float
colcndPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
colcnd
Ptr Float
amaxPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
amax
Ptr CChar
equedPtr <- FortranIO Char (Ptr CChar)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Char IO ()
forall a. IO a -> ContT Char IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Char IO ()) -> IO () -> ContT Char IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CChar
-> IO ()
FFI.laqgb Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
rPtr Ptr Float
cPtr Ptr Float
rowcndPtr Ptr Float
colcndPtr Ptr Float
amaxPtr Ptr CChar
equedPtr
IO Char -> ContT Char IO Char
forall a. IO a -> ContT Char IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Char -> ContT Char IO Char) -> IO Char -> ContT Char IO Char
forall a b. (a -> b) -> a -> b
$ (CChar -> Char) -> IO CChar -> IO Char
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CChar -> Char
castCCharToChar (Ptr CChar -> IO CChar
forall a. Storable a => Ptr a -> IO a
peek Ptr CChar
equedPtr)
laqge ::
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Float ->
Float ->
Float ->
IO (Char)
laqge :: IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> IO Char
laqge IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
r Array ZeroInt Float
c Float
rowcnd Float
colcnd Float
amax = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let rDim0 :: Int
rDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
r
let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
c
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let m :: Int
m = Int
rDim0
String -> Bool -> IO ()
Call.assert String
"laqge: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
ContT Char IO Char -> IO Char
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Char IO Char -> IO Char) -> ContT Char IO Char -> IO Char
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
rPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
r
Ptr Float
cPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
c
Ptr Float
rowcndPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rowcnd
Ptr Float
colcndPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
colcnd
Ptr Float
amaxPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
amax
Ptr CChar
equedPtr <- FortranIO Char (Ptr CChar)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Char IO ()
forall a. IO a -> ContT Char IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Char IO ()) -> IO () -> ContT Char IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CChar
-> IO ()
FFI.laqge Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
rPtr Ptr Float
cPtr Ptr Float
rowcndPtr Ptr Float
colcndPtr Ptr Float
amaxPtr Ptr CChar
equedPtr
IO Char -> ContT Char IO Char
forall a. IO a -> ContT Char IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Char -> ContT Char IO Char) -> IO Char -> ContT Char IO Char
forall a b. (a -> b) -> a -> b
$ (CChar -> Char) -> IO CChar -> IO Char
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CChar -> Char
castCCharToChar (Ptr CChar -> IO CChar
forall a. Storable a => Ptr a -> IO a
peek Ptr CChar
equedPtr)
laqp2 ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt CInt ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IO (Array ZeroInt Float)
laqp2 :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt CInt
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IO (Array ZeroInt Float)
laqp2 Int
m Int
offset IOArray (ZeroInt, ZeroInt) Float
a IOArray ZeroInt CInt
jpvt IOArray ZeroInt Float
vn1 IOArray ZeroInt Float
vn2 = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let jpvtDim0 :: Int
jpvtDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
jpvt
let vn1Dim0 :: Int
vn1Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vn1
let vn2Dim0 :: Int
vn2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vn2
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"laqp2: n == jpvtDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
jpvtDim0)
String -> Bool -> IO ()
Call.assert String
"laqp2: n == vn1Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vn1Dim0)
String -> Bool -> IO ()
Call.assert String
"laqp2: n == vn2Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vn2Dim0)
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float))
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
offsetPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
offset
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
jpvtPtr <- IOArray ZeroInt CInt -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpvt
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
vn1Ptr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vn1
Ptr Float
vn2Ptr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vn2
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO () -> ContT (Array ZeroInt Float) IO ()
forall a. IO a -> ContT (Array ZeroInt Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float) IO ())
-> IO () -> ContT (Array ZeroInt Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.laqp2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
offsetPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
jpvtPtr Ptr Float
tauPtr Ptr Float
vn1Ptr Ptr Float
vn2Ptr Ptr Float
workPtr
IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
forall a. IO a -> ContT (Array ZeroInt Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float))
-> IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
laqps ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt CInt ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int, Array ZeroInt Float)
laqps :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt CInt
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Int, Array ZeroInt Float)
laqps Int
m Int
offset IOArray (ZeroInt, ZeroInt) Float
a IOArray ZeroInt CInt
jpvt Int
kb IOArray ZeroInt Float
vn1 IOArray ZeroInt Float
vn2 IOArray ZeroInt Float
auxv IOArray (ZeroInt, ZeroInt) Float
f = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let jpvtDim0 :: Int
jpvtDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
jpvt
let vn1Dim0 :: Int
vn1Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vn1
let vn2Dim0 :: Int
vn2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vn2
let auxvDim0 :: Int
auxvDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
auxv
let (Int
fDim0,Int
fDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
f
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nb :: Int
nb = Int
auxvDim0
let ldf :: Int
ldf = Int
fDim1
String -> Bool -> IO ()
Call.assert String
"laqps: n == jpvtDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
jpvtDim0)
String -> Bool -> IO ()
Call.assert String
"laqps: n == vn1Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vn1Dim0)
String -> Bool -> IO ()
Call.assert String
"laqps: n == vn2Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vn2Dim0)
String -> Bool -> IO ()
Call.assert String
"laqps: nb == fDim0" (Int
nb Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
fDim0)
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kb
ContT (Int, Array ZeroInt Float) IO (Int, Array ZeroInt Float)
-> IO (Int, Array ZeroInt Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Array ZeroInt Float) IO (Int, Array ZeroInt Float)
-> IO (Int, Array ZeroInt Float))
-> ContT (Int, Array ZeroInt Float) IO (Int, Array ZeroInt Float)
-> IO (Int, Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Int, Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Int, Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
offsetPtr <- Int -> FortranIO (Int, Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
offset
Ptr CInt
nbPtr <- Int -> FortranIO (Int, Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
Ptr CInt
kbPtr <- FortranIO (Int, Array ZeroInt Float) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
jpvtPtr <- IOArray ZeroInt CInt
-> FortranIO (Int, Array ZeroInt Float) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpvt
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Int, Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
vn1Ptr <- IOArray ZeroInt Float
-> FortranIO (Int, Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vn1
Ptr Float
vn2Ptr <- IOArray ZeroInt Float
-> FortranIO (Int, Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vn2
Ptr Float
auxvPtr <- IOArray ZeroInt Float
-> FortranIO (Int, Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
auxv
Ptr Float
fPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
f
Ptr CInt
ldfPtr <- Int -> FortranIO (Int, Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldf
IO () -> ContT (Int, Array ZeroInt Float) IO ()
forall a. IO a -> ContT (Int, Array ZeroInt Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Array ZeroInt Float) IO ())
-> IO () -> ContT (Int, Array ZeroInt Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laqps Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
offsetPtr Ptr CInt
nbPtr Ptr CInt
kbPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
jpvtPtr Ptr Float
tauPtr Ptr Float
vn1Ptr Ptr Float
vn2Ptr Ptr Float
auxvPtr Ptr Float
fPtr Ptr CInt
ldfPtr
IO (Int, Array ZeroInt Float)
-> ContT (Int, Array ZeroInt Float) IO (Int, Array ZeroInt Float)
forall a. IO a -> ContT (Int, Array ZeroInt Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Array ZeroInt Float)
-> ContT (Int, Array ZeroInt Float) IO (Int, Array ZeroInt Float))
-> IO (Int, Array ZeroInt Float)
-> ContT (Int, Array ZeroInt Float) IO (Int, Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ (Int -> Array ZeroInt Float -> (Int, Array ZeroInt Float))
-> IO (Int -> Array ZeroInt Float -> (Int, Array ZeroInt Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Int -> Array ZeroInt Float -> (Int, Array ZeroInt Float))
-> IO Int -> IO (Array ZeroInt Float -> (Int, Array ZeroInt Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
kbPtr)
IO (Array ZeroInt Float -> (Int, Array ZeroInt Float))
-> IO (Array ZeroInt Float) -> IO (Int, Array ZeroInt Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
laqr0 ::
Bool ->
Bool ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
laqr0 :: Bool
-> Bool
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
laqr0 Bool
wantt Bool
wantz Int
ilo IOArray (ZeroInt, ZeroInt) Float
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) Float
z Int
workSize Int
lwork = do
let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
h
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let n :: Int
n = Int
hDim0
let ldh :: Int
ldh = Int
hDim1
let ihi :: Int
ihi = Int
zDim0
let ldz :: Int
ldz = Int
zDim1
IOArray ZeroInt Float
wr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
ihi
IOArray ZeroInt Float
wi <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
ihi
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wanttPtr <- Bool
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
Ptr Bool
wantzPtr <- Bool
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr Float
hPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
h
Ptr CInt
ldhPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr Float
wrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wr
Ptr Float
wiPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wi
Ptr CInt
ilozPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
Ptr CInt
ihizPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laqr0 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
hPtr Ptr CInt
ldhPtr Ptr Float
wrPtr Ptr Float
wiPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wi
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
laqr1 ::
Array (ZeroInt,ZeroInt) Float ->
Float ->
Float ->
Float ->
Float ->
IO (Array ZeroInt Float)
laqr1 :: Array (ZeroInt, ZeroInt) Float
-> Float -> Float -> Float -> Float -> IO (Array ZeroInt Float)
laqr1 Array (ZeroInt, ZeroInt) Float
h Float
sr1 Float
si1 Float
sr2 Float
si2 = do
let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
h
let n :: Int
n = Int
hDim0
let ldh :: Int
ldh = Int
hDim1
IOArray ZeroInt Float
v <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float))
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
hPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
h
Ptr CInt
ldhPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr Float
sr1Ptr <- Float -> FortranIO (Array ZeroInt Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sr1
Ptr Float
si1Ptr <- Float -> FortranIO (Array ZeroInt Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
si1
Ptr Float
sr2Ptr <- Float -> FortranIO (Array ZeroInt Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sr2
Ptr Float
si2Ptr <- Float -> FortranIO (Array ZeroInt Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
si2
Ptr Float
vPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
v
IO () -> ContT (Array ZeroInt Float) IO ()
forall a. IO a -> ContT (Array ZeroInt Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float) IO ())
-> IO () -> ContT (Array ZeroInt Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.laqr1 Ptr CInt
nPtr Ptr Float
hPtr Ptr CInt
ldhPtr Ptr Float
sr1Ptr Ptr Float
si1Ptr Ptr Float
sr2Ptr Ptr Float
si2Ptr Ptr Float
vPtr
IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
forall a. IO a -> ContT (Array ZeroInt Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float))
-> IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
v
laqr2 ::
Bool ->
Bool ->
Int ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float)
laqr2 :: Bool
-> Bool
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
laqr2 Bool
wantt Bool
wantz Int
ktop Int
kbot Int
nw IOArray (ZeroInt, ZeroInt) Float
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) Float
z Int
ldv Int
nh Int
ldt Int
nv Int
ldwv Int
lwork = do
let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
h
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let n :: Int
n = Int
hDim0
let ldh :: Int
ldh = Int
hDim1
let ldz :: Int
ldz = Int
zDim1
String -> Bool -> IO ()
Call.assert String
"laqr2: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
sr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kbot
IOArray ZeroInt Float
si <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kbot
IOArray (ZeroInt, ZeroInt) Float
v <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldv
IOArray (ZeroInt, ZeroInt) Float
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldt
IOArray (ZeroInt, ZeroInt) Float
wv <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldwv
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wanttPtr <- Bool
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
Ptr Bool
wantzPtr <- Bool
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
ktopPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ktop
Ptr CInt
kbotPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kbot
Ptr CInt
nwPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nw
Ptr Float
hPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
h
Ptr CInt
ldhPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr CInt
ilozPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
Ptr CInt
ihizPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
nsPtr <- FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
ndPtr <- FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
srPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
sr
Ptr Float
siPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
si
Ptr Float
vPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v
Ptr CInt
ldvPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr CInt
nhPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nh
Ptr Float
tPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
t
Ptr CInt
ldtPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr CInt
nvPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nv
Ptr Float
wvPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
wv
Ptr CInt
ldwvPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwv
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
IO ()
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
()
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
())
-> IO ()
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laqr2 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
ktopPtr Ptr CInt
kbotPtr Ptr CInt
nwPtr Ptr Float
hPtr Ptr CInt
ldhPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr CInt
nsPtr Ptr CInt
ndPtr Ptr Float
srPtr Ptr Float
siPtr Ptr Float
vPtr Ptr CInt
ldvPtr Ptr CInt
nhPtr Ptr Float
tPtr Ptr CInt
ldtPtr Ptr CInt
nvPtr Ptr Float
wvPtr Ptr CInt
ldwvPtr Ptr Float
workPtr Ptr CInt
lworkPtr
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ (Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO
(Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
IO
(Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO Int
-> IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
nsPtr)
IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ndPtr)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
sr
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
si
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
v
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
t
IO
(Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
wv
laqr3 ::
Bool ->
Bool ->
Int ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float)
laqr3 :: Bool
-> Bool
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
laqr3 Bool
wantt Bool
wantz Int
ktop Int
kbot Int
nw IOArray (ZeroInt, ZeroInt) Float
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) Float
z Int
ldv Int
nh Int
ldt Int
nv Int
ldwv Int
lwork = do
let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
h
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let n :: Int
n = Int
hDim0
let ldh :: Int
ldh = Int
hDim1
let ldz :: Int
ldz = Int
zDim1
String -> Bool -> IO ()
Call.assert String
"laqr3: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
sr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kbot
IOArray ZeroInt Float
si <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kbot
IOArray (ZeroInt, ZeroInt) Float
v <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldv
IOArray (ZeroInt, ZeroInt) Float
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldt
IOArray (ZeroInt, ZeroInt) Float
wv <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldwv
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wanttPtr <- Bool
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
Ptr Bool
wantzPtr <- Bool
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
ktopPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ktop
Ptr CInt
kbotPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kbot
Ptr CInt
nwPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nw
Ptr Float
hPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
h
Ptr CInt
ldhPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr CInt
ilozPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
Ptr CInt
ihizPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
nsPtr <- FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
ndPtr <- FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
srPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
sr
Ptr Float
siPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
si
Ptr Float
vPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v
Ptr CInt
ldvPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr CInt
nhPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nh
Ptr Float
tPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
t
Ptr CInt
ldtPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr CInt
nvPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nv
Ptr Float
wvPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
wv
Ptr CInt
ldwvPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwv
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
IO ()
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
()
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
())
-> IO ()
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laqr3 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
ktopPtr Ptr CInt
kbotPtr Ptr CInt
nwPtr Ptr Float
hPtr Ptr CInt
ldhPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr CInt
nsPtr Ptr CInt
ndPtr Ptr Float
srPtr Ptr Float
siPtr Ptr Float
vPtr Ptr CInt
ldvPtr Ptr CInt
nhPtr Ptr Float
tPtr Ptr CInt
ldtPtr Ptr CInt
nvPtr Ptr Float
wvPtr Ptr CInt
ldwvPtr Ptr Float
workPtr Ptr CInt
lworkPtr
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ (Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO
(Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
IO
(Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO Int
-> IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
nsPtr)
IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ndPtr)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
sr
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
si
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
v
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
t
IO
(Array (ZeroInt, ZeroInt) Float
-> (Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
wv
laqr4 ::
Bool ->
Bool ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
laqr4 :: Bool
-> Bool
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
laqr4 Bool
wantt Bool
wantz Int
ilo IOArray (ZeroInt, ZeroInt) Float
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) Float
z Int
workSize Int
lwork = do
let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
h
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let n :: Int
n = Int
hDim0
let ldh :: Int
ldh = Int
hDim1
let ihi :: Int
ihi = Int
zDim0
let ldz :: Int
ldz = Int
zDim1
IOArray ZeroInt Float
wr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
ihi
IOArray ZeroInt Float
wi <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
ihi
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wanttPtr <- Bool
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
Ptr Bool
wantzPtr <- Bool
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr Float
hPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
h
Ptr CInt
ldhPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr Float
wrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wr
Ptr Float
wiPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wi
Ptr CInt
ilozPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
Ptr CInt
ihizPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laqr4 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
hPtr Ptr CInt
ldhPtr Ptr Float
wrPtr Ptr Float
wiPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wi
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
laqr5 ::
Bool ->
Bool ->
Int ->
Int ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float)
laqr5 :: Bool
-> Bool
-> Int
-> Int
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
laqr5 Bool
wantt Bool
wantz Int
kacc22 Int
ktop Int
kbot IOArray ZeroInt Float
sr IOArray ZeroInt Float
si IOArray (ZeroInt, ZeroInt) Float
h Int
iloz IOArray (ZeroInt, ZeroInt) Float
z Int
ldv Int
ldu Int
nv Int
ldwv Int
nh Int
ldwh = do
let srDim0 :: Int
srDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
sr
let siDim0 :: Int
siDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
si
let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
h
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let nshfts :: Int
nshfts = Int
srDim0
let n :: Int
n = Int
hDim0
let ldh :: Int
ldh = Int
hDim1
let ihiz :: Int
ihiz = Int
zDim0
let ldz :: Int
ldz = Int
zDim1
String -> Bool -> IO ()
Call.assert String
"laqr5: nshfts == siDim0" (Int
nshfts Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
siDim0)
IOArray (ZeroInt, ZeroInt) Float
v <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
nshftsInt -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2) Int
ldv
IOArray (ZeroInt, ZeroInt) Float
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nshftsInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
3) Int
ldu
IOArray (ZeroInt, ZeroInt) Float
wv <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nshftsInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
3) Int
ldwv
IOArray (ZeroInt, ZeroInt) Float
wh <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nh Int
ldwh
ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wanttPtr <- Bool
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
Ptr Bool
wantzPtr <- Bool
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
kacc22Ptr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kacc22
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
ktopPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ktop
Ptr CInt
kbotPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kbot
Ptr CInt
nshftsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nshfts
Ptr Float
srPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
sr
Ptr Float
siPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
si
Ptr Float
hPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
h
Ptr CInt
ldhPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr CInt
ilozPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
Ptr CInt
ihizPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
vPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v
Ptr CInt
ldvPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr Float
uPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr CInt
nvPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nv
Ptr Float
wvPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
wv
Ptr CInt
ldwvPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwv
Ptr CInt
nhPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nh
Ptr Float
whPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
wh
Ptr CInt
ldwhPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwh
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laqr5 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
kacc22Ptr Ptr CInt
nPtr Ptr CInt
ktopPtr Ptr CInt
kbotPtr Ptr CInt
nshftsPtr Ptr Float
srPtr Ptr Float
siPtr Ptr Float
hPtr Ptr CInt
ldhPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
vPtr Ptr CInt
ldvPtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr CInt
nvPtr Ptr Float
wvPtr Ptr CInt
ldwvPtr Ptr CInt
nhPtr Ptr Float
whPtr Ptr CInt
ldwhPtr
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float))
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
v
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
u
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
wv
IO
(Array (ZeroInt, ZeroInt) Float
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
wh
laqsb ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Float ->
Float ->
IO (Char)
laqsb :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Float
-> Float
-> IO Char
laqsb Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) Float
ab Array ZeroInt Float
s Float
scond Float
amax = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
s
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
String -> Bool -> IO ()
Call.assert String
"laqsb: n == sDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
ContT Char IO Char -> IO Char
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Char IO Char -> IO Char) -> ContT Char IO Char -> IO Char
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Char (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
sPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
s
Ptr Float
scondPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
scond
Ptr Float
amaxPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
amax
Ptr CChar
equedPtr <- FortranIO Char (Ptr CChar)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Char IO ()
forall a. IO a -> ContT Char IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Char IO ()) -> IO () -> ContT Char IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CChar
-> IO ()
FFI.laqsb Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr CChar
equedPtr
IO Char -> ContT Char IO Char
forall a. IO a -> ContT Char IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Char -> ContT Char IO Char) -> IO Char -> ContT Char IO Char
forall a b. (a -> b) -> a -> b
$ (CChar -> Char) -> IO CChar -> IO Char
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CChar -> Char
castCCharToChar (Ptr CChar -> IO CChar
forall a. Storable a => Ptr a -> IO a
peek Ptr CChar
equedPtr)
laqsp ::
Char ->
IOArray ZeroInt Float ->
Array ZeroInt Float ->
Float ->
Float ->
IO (Char)
laqsp :: Char
-> IOArray ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> IO Char
laqsp Char
uplo IOArray ZeroInt Float
ap Array ZeroInt Float
s Float
scond Float
amax = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
s
let n :: Int
n = Int
sDim0
String -> Bool -> IO ()
Call.assert String
"laqsp: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
ContT Char IO Char -> IO Char
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Char IO Char -> IO Char) -> ContT Char IO Char -> IO Char
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Char (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- IOArray ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr Float
sPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
s
Ptr Float
scondPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
scond
Ptr Float
amaxPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
amax
Ptr CChar
equedPtr <- FortranIO Char (Ptr CChar)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Char IO ()
forall a. IO a -> ContT Char IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Char IO ()) -> IO () -> ContT Char IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CChar
-> IO ()
FFI.laqsp Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr CChar
equedPtr
IO Char -> ContT Char IO Char
forall a. IO a -> ContT Char IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Char -> ContT Char IO Char) -> IO Char -> ContT Char IO Char
forall a b. (a -> b) -> a -> b
$ (CChar -> Char) -> IO CChar -> IO Char
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CChar -> Char
castCCharToChar (Ptr CChar -> IO CChar
forall a. Storable a => Ptr a -> IO a
peek Ptr CChar
equedPtr)
laqsy ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Float ->
Float ->
IO (Char)
laqsy :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Float
-> Float
-> IO Char
laqsy Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
s Float
scond Float
amax = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
s
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"laqsy: n == sDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
ContT Char IO Char -> IO Char
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Char IO Char -> IO Char) -> ContT Char IO Char -> IO Char
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Char (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
sPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
s
Ptr Float
scondPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
scond
Ptr Float
amaxPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
amax
Ptr CChar
equedPtr <- FortranIO Char (Ptr CChar)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Char IO ()
forall a. IO a -> ContT Char IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Char IO ()) -> IO () -> ContT Char IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CChar
-> IO ()
FFI.laqsy Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr CChar
equedPtr
IO Char -> ContT Char IO Char
forall a. IO a -> ContT Char IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Char -> ContT Char IO Char) -> IO Char -> ContT Char IO Char
forall a b. (a -> b) -> a -> b
$ (CChar -> Char) -> IO CChar -> IO Char
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CChar -> Char
castCCharToChar (Ptr CChar -> IO CChar
forall a. Storable a => Ptr a -> IO a
peek Ptr CChar
equedPtr)
laqtr ::
Bool ->
Bool ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Float ->
IOArray ZeroInt Float ->
IO (Float, Int)
laqtr :: Bool
-> Bool
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Float
-> IOArray ZeroInt Float
-> IO (Float, Int)
laqtr Bool
ltran Bool
lreal Array (ZeroInt, ZeroInt) Float
t Array ZeroInt Float
b Float
w IOArray ZeroInt Float
x = do
let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
t
let bDim0 :: Int
bDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
b
let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
x
let n :: Int
n = Int
tDim0
let ldt :: Int
ldt = Int
tDim1
String -> Bool -> IO ()
Call.assert String
"laqtr: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
String -> Bool -> IO ()
Call.assert String
"laqtr: 2*n == xDim0" (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
ltranPtr <- Bool -> FortranIO (Float, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
ltran
Ptr Bool
lrealPtr <- Bool -> FortranIO (Float, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
lreal
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
tPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
t
Ptr CInt
ldtPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr Float
bPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
b
Ptr Float
wPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
w
Ptr Float
scalePtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
xPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laqtr Ptr Bool
ltranPtr Ptr Bool
lrealPtr Ptr CInt
nPtr Ptr Float
tPtr Ptr CInt
ldtPtr Ptr Float
bPtr Ptr Float
wPtr Ptr Float
scalePtr Ptr Float
xPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lar1v ::
Int ->
Int ->
Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Float ->
Float ->
IOArray ZeroInt Float ->
Bool ->
Int ->
IO (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
lar1v :: Int
-> Int
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> IOArray ZeroInt Float
-> Bool
-> Int
-> IO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
lar1v Int
b1 Int
bn Float
lambda Array ZeroInt Float
d Array ZeroInt Float
l Array ZeroInt Float
ld Array ZeroInt Float
lld Float
pivmin Float
gaptol IOArray ZeroInt Float
z Bool
wantnc Int
r = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let lDim0 :: Int
lDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
l
let ldDim0 :: Int
ldDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ld
let lldDim0 :: Int
lldDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
lld
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
z
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"lar1v: n-1 == lDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
lDim0)
String -> Bool -> IO ()
Call.assert String
"lar1v: n-1 == ldDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ldDim0)
String -> Bool -> IO ()
Call.assert String
"lar1v: n-1 == lldDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
lldDim0)
String -> Bool -> IO ()
Call.assert String
"lar1v: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt CInt
isuppz <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
IO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
-> IO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
IO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
-> IO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float))
-> ContT
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
IO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
-> IO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
b1Ptr <- Int
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
b1
Ptr CInt
bnPtr <- Int
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
bn
Ptr Float
lambdaPtr <- Float
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
lambda
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
lPtr <- Array ZeroInt Float
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
l
Ptr Float
ldPtr <- Array ZeroInt Float
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ld
Ptr Float
lldPtr <- Array ZeroInt Float
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
lld
Ptr Float
pivminPtr <- Float
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
pivmin
Ptr Float
gaptolPtr <- Float
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
gaptol
Ptr Float
zPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
z
Ptr Bool
wantncPtr <- Bool
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantnc
Ptr CInt
negcntPtr <- FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
ztzPtr <- FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
mingmaPtr <- FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
rPtr <- Int
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
r
Ptr CInt
isuppzPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isuppz
Ptr Float
nrminvPtr <- FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
residPtr <- FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
rqcorrPtr <- FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO ()
-> ContT
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
IO
()
forall a.
IO a
-> ContT
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
IO
())
-> IO ()
-> ContT
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Bool
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.lar1v Ptr CInt
nPtr Ptr CInt
b1Ptr Ptr CInt
bnPtr Ptr Float
lambdaPtr Ptr Float
dPtr Ptr Float
lPtr Ptr Float
ldPtr Ptr Float
lldPtr Ptr Float
pivminPtr Ptr Float
gaptolPtr Ptr Float
zPtr Ptr Bool
wantncPtr Ptr CInt
negcntPtr Ptr Float
ztzPtr Ptr Float
mingmaPtr Ptr CInt
rPtr Ptr CInt
isuppzPtr Ptr Float
nrminvPtr Ptr Float
residPtr Ptr Float
rqcorrPtr Ptr Float
workPtr
IO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
-> ContT
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
IO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
forall a.
IO a
-> ContT
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
-> ContT
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
IO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float))
-> IO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
-> ContT
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
IO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ (Int
-> Float
-> Float
-> Int
-> Array ZeroInt CInt
-> Float
-> Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
-> IO
(Int
-> Float
-> Float
-> Int
-> Array ZeroInt CInt
-> Float
-> Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,)
IO
(Int
-> Float
-> Float
-> Int
-> Array ZeroInt CInt
-> Float
-> Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
-> IO Int
-> IO
(Float
-> Float
-> Int
-> Array ZeroInt CInt
-> Float
-> Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
negcntPtr)
IO
(Float
-> Float
-> Int
-> Array ZeroInt CInt
-> Float
-> Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
-> IO Float
-> IO
(Float
-> Int
-> Array ZeroInt CInt
-> Float
-> Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
ztzPtr
IO
(Float
-> Int
-> Array ZeroInt CInt
-> Float
-> Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
-> IO Float
-> IO
(Int
-> Array ZeroInt CInt
-> Float
-> Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
mingmaPtr
IO
(Int
-> Array ZeroInt CInt
-> Float
-> Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
-> IO Int
-> IO
(Array ZeroInt CInt
-> Float
-> Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
rPtr)
IO
(Array ZeroInt CInt
-> Float
-> Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
-> IO (Array ZeroInt CInt)
-> IO
(Float
-> Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isuppz
IO
(Float
-> Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
-> IO Float
-> IO
(Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
nrminvPtr
IO
(Float
-> Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
-> IO Float
-> IO
(Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
residPtr
IO
(Float
-> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
Float))
-> IO Float
-> IO
(Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rqcorrPtr
lar2v ::
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Int ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Int ->
IO ()
lar2v :: Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> IO ()
lar2v Int
n IOArray ZeroInt Float
x IOArray ZeroInt Float
y IOArray ZeroInt Float
z Int
incx Array ZeroInt Float
c Array ZeroInt Float
s Int
incc = do
let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
x
let yDim0 :: Int
yDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
y
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
z
let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
c
let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
s
let _xSize :: Int
_xSize = Int
xDim0
let _ySize :: Int
_ySize = Int
yDim0
let _zSize :: Int
_zSize = Int
zDim0
String -> Bool -> IO ()
Call.assert String
"lar2v: 1+(n-1)*incc == cDim0" (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
incc Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
String -> Bool -> IO ()
Call.assert String
"lar2v: 1+(n-1)*incc == sDim0" (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
incc Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
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
$ do
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
xPtr <- IOArray ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
Ptr Float
yPtr <- IOArray ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
y
Ptr Float
zPtr <- IOArray ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
z
Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr Float
cPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
c
Ptr Float
sPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
s
Ptr CInt
inccPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incc
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lar2v Ptr CInt
nPtr Ptr Float
xPtr Ptr Float
yPtr Ptr Float
zPtr Ptr CInt
incxPtr Ptr Float
cPtr Ptr Float
sPtr Ptr CInt
inccPtr
larf ::
Char ->
Int ->
Array ZeroInt Float ->
Int ->
Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO ()
larf :: Char
-> Int
-> Array ZeroInt Float
-> Int
-> Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO ()
larf Char
side Int
m Array ZeroInt Float
v Int
incv Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
workSize = do
let vDim0 :: Int
vDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
v
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let _vSize :: Int
_vSize = Int
vDim0
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
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
$ do
Ptr CChar
sidePtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
vPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
v
Ptr CInt
incvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incv
Ptr Float
tauPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> IO ()
FFI.larf Ptr CChar
sidePtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
vPtr Ptr CInt
incvPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr
larfb ::
Char ->
Char ->
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO ()
larfb :: Char
-> Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO ()
larfb Char
side Char
trans Char
direct Char
storev Int
m Array (ZeroInt, ZeroInt) Float
v Array (ZeroInt, ZeroInt) Float
t IOArray (ZeroInt, ZeroInt) Float
c Int
ldwork = do
let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
v
let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
t
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let _vSize :: Int
_vSize = Int
vDim0
let ldv :: Int
ldv = Int
vDim1
let k :: Int
k = Int
tDim0
let ldt :: Int
ldt = Int
tDim1
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray (ZeroInt, ZeroInt) Float
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
k Int
ldwork
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
$ do
Ptr CChar
sidePtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
transPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
directPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
direct
Ptr CChar
storevPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
storev
Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
vPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
v
Ptr CInt
ldvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr Float
tPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
t
Ptr CInt
ldtPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
work
Ptr CInt
ldworkPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwork
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.larfb Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CChar
directPtr Ptr CChar
storevPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
vPtr Ptr CInt
ldvPtr Ptr Float
tPtr Ptr CInt
ldtPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
ldworkPtr
larfg ::
Int ->
Float ->
IOArray ZeroInt Float ->
Int ->
IO (Float, Float)
larfg :: Int -> Float -> IOArray ZeroInt Float -> Int -> IO (Float, Float)
larfg Int
n Float
alpha IOArray ZeroInt Float
x Int
incx = do
let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
x
let _xSize :: Int
_xSize = Int
xDim0
ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float) IO (Float, Float) -> IO (Float, Float))
-> ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
alphaPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
alpha
Ptr Float
xPtr <- IOArray ZeroInt Float -> FortranIO (Float, Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
Ptr CInt
incxPtr <- Int -> FortranIO (Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr Float
tauPtr <- FortranIO (Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float) IO ()
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float) IO ())
-> IO () -> ContT (Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float -> Ptr Float -> Ptr CInt -> Ptr Float -> IO ()
FFI.larfg Ptr CInt
nPtr Ptr Float
alphaPtr Ptr Float
xPtr Ptr CInt
incxPtr Ptr Float
tauPtr
IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float) -> ContT (Float, Float) IO (Float, Float))
-> IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> (Float, Float))
-> IO (Float -> Float -> (Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Float -> (Float, Float))
-> IO Float -> IO (Float -> (Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
alphaPtr
IO (Float -> (Float, Float)) -> IO Float -> IO (Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
tauPtr
larfgp ::
Int ->
Float ->
IOArray ZeroInt Float ->
Int ->
IO (Float, Float)
larfgp :: Int -> Float -> IOArray ZeroInt Float -> Int -> IO (Float, Float)
larfgp Int
n Float
alpha IOArray ZeroInt Float
x Int
incx = do
let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
x
let _xSize :: Int
_xSize = Int
xDim0
ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float) IO (Float, Float) -> IO (Float, Float))
-> ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
alphaPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
alpha
Ptr Float
xPtr <- IOArray ZeroInt Float -> FortranIO (Float, Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
Ptr CInt
incxPtr <- Int -> FortranIO (Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr Float
tauPtr <- FortranIO (Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float) IO ()
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float) IO ())
-> IO () -> ContT (Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float -> Ptr Float -> Ptr CInt -> Ptr Float -> IO ()
FFI.larfgp Ptr CInt
nPtr Ptr Float
alphaPtr Ptr Float
xPtr Ptr CInt
incxPtr Ptr Float
tauPtr
IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float) -> ContT (Float, Float) IO (Float, Float))
-> IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> (Float, Float))
-> IO (Float -> Float -> (Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Float -> (Float, Float))
-> IO Float -> IO (Float -> (Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
alphaPtr
IO (Float -> (Float, Float)) -> IO Float -> IO (Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
tauPtr
larft ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float)
larft :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float)
larft Char
direct Char
storev Int
n Array (ZeroInt, ZeroInt) Float
v Array ZeroInt Float
tau Int
ldt = do
let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
v
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let _vSize :: Int
_vSize = Int
vDim0
let ldv :: Int
ldv = Int
vDim1
let k :: Int
k = Int
tauDim0
IOArray (ZeroInt, ZeroInt) Float
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
k Int
ldt
ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
-> IO (Array (ZeroInt, ZeroInt) Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
-> IO (Array (ZeroInt, ZeroInt) Float))
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
-> IO (Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
directPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
direct
Ptr CChar
storevPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
storev
Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
vPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
v
Ptr CInt
ldvPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr Float
tauPtr <- Array ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
tPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
t
Ptr CInt
ldtPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
IO () -> ContT (Array (ZeroInt, ZeroInt) Float) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.larft Ptr CChar
directPtr Ptr CChar
storevPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
vPtr Ptr CInt
ldvPtr Ptr Float
tauPtr Ptr Float
tPtr Ptr CInt
ldtPtr
IO (Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
t
larfx ::
Char ->
Int ->
Array ZeroInt Float ->
Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO ()
larfx :: Char
-> Int
-> Array ZeroInt Float
-> Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO ()
larfx Char
side Int
m Array ZeroInt Float
v Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
workSize = do
let vDim0 :: Int
vDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
v
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let _vSize :: Int
_vSize = Int
vDim0
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
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
$ do
Ptr CChar
sidePtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
vPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
v
Ptr Float
tauPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> IO ()
FFI.larfx Ptr CChar
sidePtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
vPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr
largv ::
Int ->
IOArray ZeroInt Float ->
Int ->
IOArray ZeroInt Float ->
Int ->
Int ->
IO (Array ZeroInt Float)
largv :: Int
-> IOArray ZeroInt Float
-> Int
-> IOArray ZeroInt Float
-> Int
-> Int
-> IO (Array ZeroInt Float)
largv Int
n IOArray ZeroInt Float
x Int
incx IOArray ZeroInt Float
y Int
incy Int
incc = do
let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
x
let yDim0 :: Int
yDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
y
let _xSize :: Int
_xSize = Int
xDim0
let _ySize :: Int
_ySize = Int
yDim0
IOArray ZeroInt Float
c <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
incc)
ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float))
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
xPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
Ptr CInt
incxPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr Float
yPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
y
Ptr CInt
incyPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
Ptr CInt
inccPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incc
IO () -> ContT (Array ZeroInt Float) IO ()
forall a. IO a -> ContT (Array ZeroInt Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float) IO ())
-> IO () -> ContT (Array ZeroInt Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.largv Ptr CInt
nPtr Ptr Float
xPtr Ptr CInt
incxPtr Ptr Float
yPtr Ptr CInt
incyPtr Ptr Float
cPtr Ptr CInt
inccPtr
IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
forall a. IO a -> ContT (Array ZeroInt Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float))
-> IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
c
larnv ::
Int ->
IOArray ZeroInt CInt ->
Int ->
IO (Array ZeroInt Float)
larnv :: Int -> IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt Float)
larnv Int
idist IOArray ZeroInt CInt
iseed Int
n = do
let iseedDim0 :: Int
iseedDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
iseed
String -> Bool -> IO ()
Call.assert String
"larnv: 4 == iseedDim0" (Int
4 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
iseedDim0)
IOArray ZeroInt Float
x <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float))
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
idistPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
idist
Ptr CInt
iseedPtr <- IOArray ZeroInt CInt -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iseed
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
xPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
IO () -> ContT (Array ZeroInt Float) IO ()
forall a. IO a -> ContT (Array ZeroInt Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float) IO ())
-> IO () -> ContT (Array ZeroInt Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr Float -> IO ()
FFI.larnv Ptr CInt
idistPtr Ptr CInt
iseedPtr Ptr CInt
nPtr Ptr Float
xPtr
IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
forall a. IO a -> ContT (Array ZeroInt Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float))
-> IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
x
larra ::
Array ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Float ->
Float ->
IO (Int, Array ZeroInt CInt, Int)
larra :: Array ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Float
-> IO (Int, Array ZeroInt CInt, Int)
larra Array ZeroInt Float
d IOArray ZeroInt Float
e IOArray ZeroInt Float
e2 Float
spltol Float
tnrm = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let e2Dim0 :: Int
e2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e2
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"larra: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"larra: n == e2Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
e2Dim0)
IOArray ZeroInt CInt
isplit <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Array ZeroInt CInt, Int) IO (Int, Array ZeroInt CInt, Int)
-> IO (Int, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt CInt, Int) IO (Int, Array ZeroInt CInt, Int)
-> IO (Int, Array ZeroInt CInt, Int))
-> ContT
(Int, Array ZeroInt CInt, Int) IO (Int, Array ZeroInt CInt, Int)
-> IO (Int, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Int, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO (Int, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO (Int, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
e2Ptr <- IOArray ZeroInt Float
-> FortranIO (Int, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e2
Ptr Float
spltolPtr <- Float -> FortranIO (Int, Array ZeroInt CInt, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
spltol
Ptr Float
tnrmPtr <- Float -> FortranIO (Int, Array ZeroInt CInt, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tnrm
Ptr CInt
nsplitPtr <- FortranIO (Int, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
isplitPtr <- IOArray ZeroInt CInt
-> FortranIO (Int, Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isplit
Ptr CInt
infoPtr <- FortranIO (Int, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Int, Array ZeroInt CInt, Int) IO ()
forall a. IO a -> ContT (Int, Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Int, Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.larra Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
e2Ptr Ptr Float
spltolPtr Ptr Float
tnrmPtr Ptr CInt
nsplitPtr Ptr CInt
isplitPtr Ptr CInt
infoPtr
IO (Int, Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt CInt, Int) IO (Int, Array ZeroInt CInt, Int)
forall a. IO a -> ContT (Int, Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt CInt, Int) IO (Int, Array ZeroInt CInt, Int))
-> IO (Int, Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt CInt, Int) IO (Int, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt CInt -> Int -> (Int, Array ZeroInt CInt, Int))
-> IO
(Int
-> Array ZeroInt CInt -> Int -> (Int, Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Int
-> Array ZeroInt CInt -> Int -> (Int, Array ZeroInt CInt, Int))
-> IO Int
-> IO (Array ZeroInt CInt -> Int -> (Int, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
nsplitPtr)
IO (Array ZeroInt CInt -> Int -> (Int, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO (Int -> (Int, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isplit
IO (Int -> (Int, Array ZeroInt CInt, Int))
-> IO Int -> IO (Int, Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
larrb ::
Array ZeroInt Float ->
Array ZeroInt Float ->
Int ->
Int ->
Float ->
Float ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Float ->
Float ->
Int ->
IO (Int)
larrb :: Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Int
-> Float
-> Float
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Float
-> Int
-> IO Int
larrb Array ZeroInt Float
d Array ZeroInt Float
lld Int
ifirst Int
ilast Float
rtol1 Float
rtol2 Int
offset IOArray ZeroInt Float
w IOArray ZeroInt Float
wgap IOArray ZeroInt Float
werr Float
pivmin Float
spdiam Int
twist = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let lldDim0 :: Int
lldDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
lld
let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
w
let wgapDim0 :: Int
wgapDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
wgap
let werrDim0 :: Int
werrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
werr
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"larrb: n-1 == lldDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
lldDim0)
String -> Bool -> IO ()
Call.assert String
"larrb: n == wDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
String -> Bool -> IO ()
Call.assert String
"larrb: n-1 == wgapDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wgapDim0)
String -> Bool -> IO ()
Call.assert String
"larrb: n == werrDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
werrDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
lldPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
lld
Ptr CInt
ifirstPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ifirst
Ptr CInt
ilastPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilast
Ptr Float
rtol1Ptr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rtol1
Ptr Float
rtol2Ptr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rtol2
Ptr CInt
offsetPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
offset
Ptr Float
wPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
wgapPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wgap
Ptr Float
werrPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
werr
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr Float
pivminPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
pivmin
Ptr Float
spdiamPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
spdiam
Ptr CInt
twistPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
twist
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.larrb Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
lldPtr Ptr CInt
ifirstPtr Ptr CInt
ilastPtr Ptr Float
rtol1Ptr Ptr Float
rtol2Ptr Ptr CInt
offsetPtr Ptr Float
wPtr Ptr Float
wgapPtr Ptr Float
werrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr Float
pivminPtr Ptr Float
spdiamPtr Ptr CInt
twistPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
larrc ::
Char ->
Float ->
Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Float ->
IO (Int, Int, Int, Int)
larrc :: Char
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> IO (Int, Int, Int, Int)
larrc Char
jobt Float
vl Float
vu Array ZeroInt Float
d Array ZeroInt Float
e Float
pivmin = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"larrc: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
ContT (Int, Int, Int, Int) IO (Int, Int, Int, Int)
-> IO (Int, Int, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int, Int, Int) IO (Int, Int, Int, Int)
-> IO (Int, Int, Int, Int))
-> ContT (Int, Int, Int, Int) IO (Int, Int, Int, Int)
-> IO (Int, Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobtPtr <- Char -> FortranIO (Int, Int, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobt
Ptr CInt
nPtr <- Int -> FortranIO (Int, Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
vlPtr <- Float -> FortranIO (Int, Int, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float -> FortranIO (Int, Int, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO (Int, Int, Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
ePtr <- Array ZeroInt Float -> FortranIO (Int, Int, Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e
Ptr Float
pivminPtr <- Float -> FortranIO (Int, Int, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
pivmin
Ptr CInt
eigcntPtr <- FortranIO (Int, Int, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
lcntPtr <- FortranIO (Int, Int, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
rcntPtr <- FortranIO (Int, Int, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Int, Int, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Int, Int, Int, Int) IO ()
forall a. IO a -> ContT (Int, Int, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int, Int, Int) IO ())
-> IO () -> ContT (Int, Int, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.larrc Ptr CChar
jobtPtr Ptr CInt
nPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
pivminPtr Ptr CInt
eigcntPtr Ptr CInt
lcntPtr Ptr CInt
rcntPtr Ptr CInt
infoPtr
IO (Int, Int, Int, Int)
-> ContT (Int, Int, Int, Int) IO (Int, Int, Int, Int)
forall a. IO a -> ContT (Int, Int, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int, Int, Int)
-> ContT (Int, Int, Int, Int) IO (Int, Int, Int, Int))
-> IO (Int, Int, Int, Int)
-> ContT (Int, Int, Int, Int) IO (Int, Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Int -> Int -> Int -> Int -> (Int, Int, Int, Int))
-> IO (Int -> Int -> Int -> Int -> (Int, Int, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO (Int -> Int -> Int -> Int -> (Int, Int, Int, Int))
-> IO Int -> IO (Int -> Int -> Int -> (Int, Int, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
eigcntPtr)
IO (Int -> Int -> Int -> (Int, Int, Int, Int))
-> IO Int -> IO (Int -> Int -> (Int, Int, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
lcntPtr)
IO (Int -> Int -> (Int, Int, Int, Int))
-> IO Int -> IO (Int -> (Int, Int, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
rcntPtr)
IO (Int -> (Int, Int, Int, Int))
-> IO Int -> IO (Int, Int, Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
larrd ::
Char ->
Char ->
Float ->
Float ->
Int ->
Int ->
Array ZeroInt Float ->
Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Float ->
Int ->
Array ZeroInt CInt ->
IO (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float, Array ZeroInt CInt, Array ZeroInt CInt, Int)
larrd :: Char
-> Char
-> Float
-> Float
-> Int
-> Int
-> Array ZeroInt Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Int
-> Array ZeroInt CInt
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
larrd Char
range Char
order Float
vl Float
vu Int
il Int
iu Array ZeroInt Float
gers Float
reltol Array ZeroInt Float
d Array ZeroInt Float
e Array ZeroInt Float
e2 Float
pivmin Int
nsplit Array ZeroInt CInt
isplit = do
let gersDim0 :: Int
gersDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
gers
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e
let e2Dim0 :: Int
e2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e2
let isplitDim0 :: Int
isplitDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
isplit
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"larrd: 2*n == gersDim0" (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
gersDim0)
String -> Bool -> IO ()
Call.assert String
"larrd: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"larrd: n-1 == e2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
e2Dim0)
String -> Bool -> IO ()
Call.assert String
"larrd: n == isplitDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
isplitDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
werr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
iblock <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
indexw <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
rangePtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
Ptr CChar
orderPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
order
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
vlPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
Ptr CInt
iuPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Float
gersPtr <- Array ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
gers
Ptr Float
reltolPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
reltol
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
ePtr <- Array ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e
Ptr Float
e2Ptr <- Array ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e2
Ptr Float
pivminPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
pivmin
Ptr CInt
nsplitPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nsplit
Ptr CInt
isplitPtr <- Array ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
isplit
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
werrPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
werr
Ptr Float
wlPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wuPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
iblockPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iblock
Ptr CInt
indexwPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indexw
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.larrd Ptr CChar
rangePtr Ptr CChar
orderPtr Ptr CInt
nPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
gersPtr Ptr Float
reltolPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
e2Ptr Ptr Float
pivminPtr Ptr CInt
nsplitPtr Ptr CInt
isplitPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr Float
werrPtr Ptr Float
wlPtr Ptr Float
wuPtr Ptr CInt
iblockPtr Ptr CInt
indexwPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array ZeroInt Float
-> Float
-> Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Float
-> Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
werr
IO
(Float
-> Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Float
-> IO
(Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
wlPtr
IO
(Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Float
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
wuPtr
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
iblock
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indexw
IO
(Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float,
Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
larre ::
Char ->
Float ->
Float ->
Int ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Float ->
Float ->
Float ->
IO (Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
larre :: Char
-> Float
-> Float
-> Int
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Float
-> Float
-> IO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
larre Char
range Float
vl Float
vu Int
il Int
iu IOArray ZeroInt Float
d IOArray ZeroInt Float
e IOArray ZeroInt Float
e2 Float
rtol1 Float
rtol2 Float
spltol = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let e2Dim0 :: Int
e2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e2
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"larre: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"larre: n == e2Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
e2Dim0)
IOArray ZeroInt CInt
isplit <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
werr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
wgap <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
iblock <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
indexw <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
gers <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
6Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
IO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
-> IO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
IO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
-> IO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int))
-> ContT
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
IO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
-> IO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
rangePtr <- Char
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
Ptr CInt
nPtr <- Int
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
vlPtr <- Float
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
Ptr CInt
iuPtr <- Int
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
e2Ptr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e2
Ptr Float
rtol1Ptr <- Float
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rtol1
Ptr Float
rtol2Ptr <- Float
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rtol2
Ptr Float
spltolPtr <- Float
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
spltol
Ptr CInt
nsplitPtr <- FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
isplitPtr <- IOArray ZeroInt CInt
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isplit
Ptr CInt
mPtr <- FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
werrPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
werr
Ptr Float
wgapPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wgap
Ptr CInt
iblockPtr <- IOArray ZeroInt CInt
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iblock
Ptr CInt
indexwPtr <- IOArray ZeroInt CInt
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indexw
Ptr Float
gersPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
gers
Ptr Float
pivminPtr <- FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
IO
()
forall a.
IO a
-> ContT
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
IO
())
-> IO ()
-> ContT
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.larre Ptr CChar
rangePtr Ptr CInt
nPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
e2Ptr Ptr Float
rtol1Ptr Ptr Float
rtol2Ptr Ptr Float
spltolPtr Ptr CInt
nsplitPtr Ptr CInt
isplitPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr Float
werrPtr Ptr Float
wgapPtr Ptr CInt
iblockPtr Ptr CInt
indexwPtr Ptr Float
gersPtr Ptr Float
pivminPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
-> ContT
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
IO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
forall a.
IO a
-> ContT
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
-> ContT
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
IO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int))
-> IO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
-> ContT
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
IO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float
-> Float
-> Int
-> Array ZeroInt CInt
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
-> IO
(Float
-> Float
-> Int
-> Array ZeroInt CInt
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,,)
IO
(Float
-> Float
-> Int
-> Array ZeroInt CInt
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
-> IO Float
-> IO
(Float
-> Int
-> Array ZeroInt CInt
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
vlPtr
IO
(Float
-> Int
-> Array ZeroInt CInt
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
-> IO Float
-> IO
(Int
-> Array ZeroInt CInt
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
vuPtr
IO
(Int
-> Array ZeroInt CInt
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
-> IO Int
-> IO
(Array ZeroInt CInt
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
nsplitPtr)
IO
(Array ZeroInt CInt
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isplit
IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
werr
IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wgap
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
iblock
IO
(Array ZeroInt CInt
-> Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indexw
IO
(Array ZeroInt Float
-> Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
gers
IO
(Float
-> Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
-> IO Float
-> IO
(Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
pivminPtr
IO
(Int
-> (Float, Float, Int, Array ZeroInt CInt, Int,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Float, Float,
Int))
-> IO Int
-> IO
(Float, Float, Int, Array ZeroInt CInt, Int, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Array ZeroInt Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
larrf ::
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Int ->
Int ->
Array ZeroInt Float ->
IOArray ZeroInt Float ->
Array ZeroInt Float ->
Float ->
Float ->
Float ->
Float ->
IO (Float, Array ZeroInt Float, Array ZeroInt Float, Int)
larrf :: Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Int
-> Array ZeroInt Float
-> IOArray ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> Float
-> IO (Float, Array ZeroInt Float, Array ZeroInt Float, Int)
larrf Array ZeroInt Float
d Array ZeroInt Float
l Array ZeroInt Float
ld Int
clstrt Int
clend Array ZeroInt Float
w IOArray ZeroInt Float
wgap Array ZeroInt Float
werr Float
spdiam Float
clgapl Float
clgapr Float
pivmin = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let lDim0 :: Int
lDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
l
let ldDim0 :: Int
ldDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ld
let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
w
let wgapDim0 :: Int
wgapDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
wgap
let werrDim0 :: Int
werrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
werr
let n :: Int
n = Int
dDim0
let _wSize :: Int
_wSize = Int
wDim0
let _wgapSize :: Int
_wgapSize = Int
wgapDim0
let _werrSize :: Int
_werrSize = Int
werrDim0
String -> Bool -> IO ()
Call.assert String
"larrf: n-1 == lDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
lDim0)
String -> Bool -> IO ()
Call.assert String
"larrf: n-1 == ldDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ldDim0)
IOArray ZeroInt Float
dplus <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
lplus <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Float, Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Float, Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Float, Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
lPtr <- Array ZeroInt Float
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
l
Ptr Float
ldPtr <- Array ZeroInt Float
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ld
Ptr CInt
clstrtPtr <- Int
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
clstrt
Ptr CInt
clendPtr <- Int
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
clend
Ptr Float
wPtr <- Array ZeroInt Float
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
w
Ptr Float
wgapPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wgap
Ptr Float
werrPtr <- Array ZeroInt Float
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
werr
Ptr Float
spdiamPtr <- Float
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
spdiam
Ptr Float
clgaplPtr <- Float
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
clgapl
Ptr Float
clgaprPtr <- Float
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
clgapr
Ptr Float
pivminPtr <- Float
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
pivmin
Ptr Float
sigmaPtr <- FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
dplusPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dplus
Ptr Float
lplusPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
lplus
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a
-> ContT
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.larrf Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
lPtr Ptr Float
ldPtr Ptr CInt
clstrtPtr Ptr CInt
clendPtr Ptr Float
wPtr Ptr Float
wgapPtr Ptr Float
werrPtr Ptr Float
spdiamPtr Ptr Float
clgaplPtr Ptr Float
clgaprPtr Ptr Float
pivminPtr Ptr Float
sigmaPtr Ptr Float
dplusPtr Ptr Float
lplusPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Float, Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Float, Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Float, Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Float, Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Float, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Float, Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Float, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Float, Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
sigmaPtr
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Float, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Float, Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
dplus
IO
(Array ZeroInt Float
-> Int -> (Float, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int -> (Float, Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
lplus
IO (Int -> (Float, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO (Float, Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
larrj ::
Array ZeroInt Float ->
Array ZeroInt Float ->
Int ->
Int ->
Float ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Float ->
Float ->
IO (Int)
larrj :: Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Int
-> Float
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Float
-> IO Int
larrj Array ZeroInt Float
d Array ZeroInt Float
e2 Int
ifirst Int
ilast Float
rtol Int
offset IOArray ZeroInt Float
w IOArray ZeroInt Float
werr Float
pivmin Float
spdiam = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let e2Dim0 :: Int
e2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e2
let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
w
let werrDim0 :: Int
werrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
werr
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"larrj: n-1 == e2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
e2Dim0)
String -> Bool -> IO ()
Call.assert String
"larrj: n == wDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
String -> Bool -> IO ()
Call.assert String
"larrj: n == werrDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
werrDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
e2Ptr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e2
Ptr CInt
ifirstPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ifirst
Ptr CInt
ilastPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilast
Ptr Float
rtolPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rtol
Ptr CInt
offsetPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
offset
Ptr Float
wPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
werrPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
werr
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr Float
pivminPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
pivmin
Ptr Float
spdiamPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
spdiam
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.larrj Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
e2Ptr Ptr CInt
ifirstPtr Ptr CInt
ilastPtr Ptr Float
rtolPtr Ptr CInt
offsetPtr Ptr Float
wPtr Ptr Float
werrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr Float
pivminPtr Ptr Float
spdiamPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
larrk ::
Int ->
Float ->
Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Float ->
Float ->
IO (Float, Float, Int)
larrk :: Int
-> Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> IO (Float, Float, Int)
larrk Int
iw Float
gl Float
gu Array ZeroInt Float
d Array ZeroInt Float
e2 Float
pivmin Float
reltol = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let e2Dim0 :: Int
e2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e2
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"larrk: n-1 == e2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
e2Dim0)
ContT (Float, Float, Int) IO (Float, Float, Int)
-> IO (Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float, Int) IO (Float, Float, Int)
-> IO (Float, Float, Int))
-> ContT (Float, Float, Int) IO (Float, Float, Int)
-> IO (Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iwPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iw
Ptr Float
glPtr <- Float -> FortranIO (Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
gl
Ptr Float
guPtr <- Float -> FortranIO (Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
gu
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO (Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
e2Ptr <- Array ZeroInt Float -> FortranIO (Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e2
Ptr Float
pivminPtr <- Float -> FortranIO (Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
pivmin
Ptr Float
reltolPtr <- Float -> FortranIO (Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
reltol
Ptr Float
wPtr <- FortranIO (Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
werrPtr <- FortranIO (Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float, Int) IO ()
forall a. IO a -> ContT (Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Int) IO ())
-> IO () -> ContT (Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.larrk Ptr CInt
nPtr Ptr CInt
iwPtr Ptr Float
glPtr Ptr Float
guPtr Ptr Float
dPtr Ptr Float
e2Ptr Ptr Float
pivminPtr Ptr Float
reltolPtr Ptr Float
wPtr Ptr Float
werrPtr Ptr CInt
infoPtr
IO (Float, Float, Int)
-> ContT (Float, Float, Int) IO (Float, Float, Int)
forall a. IO a -> ContT (Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Int)
-> ContT (Float, Float, Int) IO (Float, Float, Int))
-> IO (Float, Float, Int)
-> ContT (Float, Float, Int) IO (Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> Int -> (Float, Float, Int))
-> IO (Float -> Float -> Int -> (Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO (Float -> Float -> Int -> (Float, Float, Int))
-> IO Float -> IO (Float -> Int -> (Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
wPtr
IO (Float -> Int -> (Float, Float, Int))
-> IO Float -> IO (Int -> (Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
werrPtr
IO (Int -> (Float, Float, Int)) -> IO Int -> IO (Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
larrr ::
Array ZeroInt Float ->
IOArray ZeroInt Float ->
IO (Int)
larrr :: Array ZeroInt Float -> IOArray ZeroInt Float -> IO Int
larrr Array ZeroInt Float
d IOArray ZeroInt Float
e = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"larrr: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr Float -> Ptr Float -> Ptr CInt -> IO ()
FFI.larrr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
larrv ::
Float ->
Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Float ->
Array ZeroInt CInt ->
Int ->
Int ->
Int ->
Float ->
Float ->
Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
Array ZeroInt Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)
larrv :: Float
-> Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Array ZeroInt CInt
-> Int
-> Int
-> Int
-> Float
-> Float
-> Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
larrv Float
vl Float
vu IOArray ZeroInt Float
d IOArray ZeroInt Float
l Float
pivmin Array ZeroInt CInt
isplit Int
m Int
dol Int
dou Float
minrgp Float
rtol1 Float
rtol2 IOArray ZeroInt Float
w IOArray ZeroInt Float
werr IOArray ZeroInt Float
wgap Array ZeroInt CInt
iblock Array ZeroInt CInt
indexw Array ZeroInt Float
gers Int
ldz = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let lDim0 :: Int
lDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
l
let isplitDim0 :: Int
isplitDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
isplit
let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
w
let werrDim0 :: Int
werrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
werr
let wgapDim0 :: Int
wgapDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
wgap
let iblockDim0 :: Int
iblockDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
iblock
let indexwDim0 :: Int
indexwDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
indexw
let gersDim0 :: Int
gersDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
gers
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"larrv: n == lDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
lDim0)
String -> Bool -> IO ()
Call.assert String
"larrv: n == isplitDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
isplitDim0)
String -> Bool -> IO ()
Call.assert String
"larrv: n == wDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
String -> Bool -> IO ()
Call.assert String
"larrv: n == werrDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
werrDim0)
String -> Bool -> IO ()
Call.assert String
"larrv: n == wgapDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wgapDim0)
String -> Bool -> IO ()
Call.assert String
"larrv: n == iblockDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
iblockDim0)
String -> Bool -> IO ()
Call.assert String
"larrv: n == indexwDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
indexwDim0)
String -> Bool -> IO ()
Call.assert String
"larrv: 2*n == gersDim0" (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
gersDim0)
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m]) Int
ldz
IOArray ZeroInt CInt
isuppz <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*[Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
12Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
7Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
vlPtr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
lPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
l
Ptr Float
pivminPtr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
pivmin
Ptr CInt
isplitPtr <- Array ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
isplit
Ptr CInt
mPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
dolPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
dol
Ptr CInt
douPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
dou
Ptr Float
minrgpPtr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
minrgp
Ptr Float
rtol1Ptr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rtol1
Ptr Float
rtol2Ptr <- Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rtol2
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
werrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
werr
Ptr Float
wgapPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wgap
Ptr CInt
iblockPtr <- Array ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
iblock
Ptr CInt
indexwPtr <- Array ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
indexw
Ptr Float
gersPtr <- Array ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
gers
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
isuppzPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isuppz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int) IO ()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int) IO ())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.larrv Ptr CInt
nPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr Float
dPtr Ptr Float
lPtr Ptr Float
pivminPtr Ptr CInt
isplitPtr Ptr CInt
mPtr Ptr CInt
dolPtr Ptr CInt
douPtr Ptr Float
minrgpPtr Ptr Float
rtol1Ptr Ptr Float
rtol2Ptr Ptr Float
wPtr Ptr Float
werrPtr Ptr Float
wgapPtr Ptr CInt
iblockPtr Ptr CInt
indexwPtr Ptr Float
gersPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr CInt
isuppzPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int -> (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isuppz
IO
(Int -> (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO Int
-> IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lartg ::
Float ->
Float ->
IO (Float, Float, Float)
lartg :: Float -> Float -> IO (Float, Float, Float)
lartg Float
f Float
g = do
ContT (Float, Float, Float) IO (Float, Float, Float)
-> IO (Float, Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float, Float) IO (Float, Float, Float)
-> IO (Float, Float, Float))
-> ContT (Float, Float, Float) IO (Float, Float, Float)
-> IO (Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
fPtr <- Float -> FortranIO (Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
f
Ptr Float
gPtr <- Float -> FortranIO (Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
g
Ptr Float
csPtr <- FortranIO (Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
snPtr <- FortranIO (Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
rPtr <- FortranIO (Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float, Float) IO ()
forall a. IO a -> ContT (Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Float) IO ())
-> IO () -> ContT (Float, Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Float
-> Ptr Float -> Ptr Float -> Ptr Float -> Ptr Float -> IO ()
FFI.lartg Ptr Float
fPtr Ptr Float
gPtr Ptr Float
csPtr Ptr Float
snPtr Ptr Float
rPtr
IO (Float, Float, Float)
-> ContT (Float, Float, Float) IO (Float, Float, Float)
forall a. IO a -> ContT (Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Float)
-> ContT (Float, Float, Float) IO (Float, Float, Float))
-> IO (Float, Float, Float)
-> ContT (Float, Float, Float) IO (Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> Float -> (Float, Float, Float))
-> IO (Float -> Float -> Float -> (Float, Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO (Float -> Float -> Float -> (Float, Float, Float))
-> IO Float -> IO (Float -> Float -> (Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
csPtr
IO (Float -> Float -> (Float, Float, Float))
-> IO Float -> IO (Float -> (Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
snPtr
IO (Float -> (Float, Float, Float))
-> IO Float -> IO (Float, Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rPtr
lartgp ::
Float ->
Float ->
IO (Float, Float, Float)
lartgp :: Float -> Float -> IO (Float, Float, Float)
lartgp Float
f Float
g = do
ContT (Float, Float, Float) IO (Float, Float, Float)
-> IO (Float, Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float, Float) IO (Float, Float, Float)
-> IO (Float, Float, Float))
-> ContT (Float, Float, Float) IO (Float, Float, Float)
-> IO (Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
fPtr <- Float -> FortranIO (Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
f
Ptr Float
gPtr <- Float -> FortranIO (Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
g
Ptr Float
csPtr <- FortranIO (Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
snPtr <- FortranIO (Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
rPtr <- FortranIO (Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float, Float) IO ()
forall a. IO a -> ContT (Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Float) IO ())
-> IO () -> ContT (Float, Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Float
-> Ptr Float -> Ptr Float -> Ptr Float -> Ptr Float -> IO ()
FFI.lartgp Ptr Float
fPtr Ptr Float
gPtr Ptr Float
csPtr Ptr Float
snPtr Ptr Float
rPtr
IO (Float, Float, Float)
-> ContT (Float, Float, Float) IO (Float, Float, Float)
forall a. IO a -> ContT (Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Float)
-> ContT (Float, Float, Float) IO (Float, Float, Float))
-> IO (Float, Float, Float)
-> ContT (Float, Float, Float) IO (Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> Float -> (Float, Float, Float))
-> IO (Float -> Float -> Float -> (Float, Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO (Float -> Float -> Float -> (Float, Float, Float))
-> IO Float -> IO (Float -> Float -> (Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
csPtr
IO (Float -> Float -> (Float, Float, Float))
-> IO Float -> IO (Float -> (Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
snPtr
IO (Float -> (Float, Float, Float))
-> IO Float -> IO (Float, Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rPtr
lartgs ::
Float ->
Float ->
Float ->
IO (Float, Float)
lartgs :: Float -> Float -> Float -> IO (Float, Float)
lartgs Float
x Float
y Float
sigma = do
ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float) IO (Float, Float) -> IO (Float, Float))
-> ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
xPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
x
Ptr Float
yPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
y
Ptr Float
sigmaPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sigma
Ptr Float
csPtr <- FortranIO (Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
snPtr <- FortranIO (Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float) IO ()
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float) IO ())
-> IO () -> ContT (Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Float
-> Ptr Float -> Ptr Float -> Ptr Float -> Ptr Float -> IO ()
FFI.lartgs Ptr Float
xPtr Ptr Float
yPtr Ptr Float
sigmaPtr Ptr Float
csPtr Ptr Float
snPtr
IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float) -> ContT (Float, Float) IO (Float, Float))
-> IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> (Float, Float))
-> IO (Float -> Float -> (Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Float -> (Float, Float))
-> IO Float -> IO (Float -> (Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
csPtr
IO (Float -> (Float, Float)) -> IO Float -> IO (Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
snPtr
lartv ::
Int ->
IOArray ZeroInt Float ->
Int ->
IOArray ZeroInt Float ->
Int ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Int ->
IO ()
lartv :: Int
-> IOArray ZeroInt Float
-> Int
-> IOArray ZeroInt Float
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> IO ()
lartv Int
n IOArray ZeroInt Float
x Int
incx IOArray ZeroInt Float
y Int
incy Array ZeroInt Float
c Array ZeroInt Float
s Int
incc = do
let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
x
let yDim0 :: Int
yDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
y
let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
c
let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
s
let _xSize :: Int
_xSize = Int
xDim0
let _ySize :: Int
_ySize = Int
yDim0
String -> Bool -> IO ()
Call.assert String
"lartv: 1+(n-1)*incc == cDim0" (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
incc Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
String -> Bool -> IO ()
Call.assert String
"lartv: 1+(n-1)*incc == sDim0" (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
incc Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
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
$ do
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
xPtr <- IOArray ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr Float
yPtr <- IOArray ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
y
Ptr CInt
incyPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
Ptr Float
cPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
c
Ptr Float
sPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
s
Ptr CInt
inccPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incc
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lartv Ptr CInt
nPtr Ptr Float
xPtr Ptr CInt
incxPtr Ptr Float
yPtr Ptr CInt
incyPtr Ptr Float
cPtr Ptr Float
sPtr Ptr CInt
inccPtr
laruv ::
IOArray ZeroInt CInt ->
Int ->
IO (Array ZeroInt Float)
laruv :: IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt Float)
laruv IOArray ZeroInt CInt
iseed Int
n = do
let iseedDim0 :: Int
iseedDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
iseed
String -> Bool -> IO ()
Call.assert String
"laruv: 4 == iseedDim0" (Int
4 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
iseedDim0)
IOArray ZeroInt Float
x <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float))
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
iseedPtr <- IOArray ZeroInt CInt -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iseed
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
xPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
IO () -> ContT (Array ZeroInt Float) IO ()
forall a. IO a -> ContT (Array ZeroInt Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float) IO ())
-> IO () -> ContT (Array ZeroInt Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr CInt -> Ptr Float -> IO ()
FFI.laruv Ptr CInt
iseedPtr Ptr CInt
nPtr Ptr Float
xPtr
IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
forall a. IO a -> ContT (Array ZeroInt Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float))
-> IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
x
larz ::
Char ->
Int ->
Int ->
Array ZeroInt Float ->
Int ->
Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO ()
larz :: Char
-> Int
-> Int
-> Array ZeroInt Float
-> Int
-> Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO ()
larz Char
side Int
m Int
l Array ZeroInt Float
v Int
incv Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
workSize = do
let vDim0 :: Int
vDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
v
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
String -> Bool -> IO ()
Call.assert String
"larz: 1+(l-1)*abs(incv) == vDim0" (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int -> Int
forall a. Num a => a -> a
abs(Int
incv) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
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
$ do
Ptr CChar
sidePtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
lPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
l
Ptr Float
vPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
v
Ptr CInt
incvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incv
Ptr Float
tauPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> IO ()
FFI.larz Ptr CChar
sidePtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
lPtr Ptr Float
vPtr Ptr CInt
incvPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr
larzb ::
Char ->
Char ->
Char ->
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO ()
larzb :: Char
-> Char
-> Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO ()
larzb Char
side Char
trans Char
direct Char
storev Int
m Int
l Array (ZeroInt, ZeroInt) Float
v Array (ZeroInt, ZeroInt) Float
t IOArray (ZeroInt, ZeroInt) Float
c Int
ldwork = do
let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
v
let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
t
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let _nv :: Int
_nv = Int
vDim0
let ldv :: Int
ldv = Int
vDim1
let k :: Int
k = Int
tDim0
let ldt :: Int
ldt = Int
tDim1
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray (ZeroInt, ZeroInt) Float
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
k Int
ldwork
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
$ do
Ptr CChar
sidePtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
transPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
directPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
direct
Ptr CChar
storevPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
storev
Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr CInt
lPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
l
Ptr Float
vPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
v
Ptr CInt
ldvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr Float
tPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
t
Ptr CInt
ldtPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
work
Ptr CInt
ldworkPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwork
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.larzb Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CChar
directPtr Ptr CChar
storevPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
lPtr Ptr Float
vPtr Ptr CInt
ldvPtr Ptr Float
tPtr Ptr CInt
ldtPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
ldworkPtr
larzt ::
Char ->
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float)
larzt :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float)
larzt Char
direct Char
storev Int
n IOArray (ZeroInt, ZeroInt) Float
v Array ZeroInt Float
tau Int
ldt = do
let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
v
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let _vSize :: Int
_vSize = Int
vDim0
let ldv :: Int
ldv = Int
vDim1
let k :: Int
k = Int
tauDim0
IOArray (ZeroInt, ZeroInt) Float
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
k Int
ldt
ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
-> IO (Array (ZeroInt, ZeroInt) Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
-> IO (Array (ZeroInt, ZeroInt) Float))
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
-> IO (Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
directPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
direct
Ptr CChar
storevPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
storev
Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
vPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v
Ptr CInt
ldvPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr Float
tauPtr <- Array ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
tPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
t
Ptr CInt
ldtPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
IO () -> ContT (Array (ZeroInt, ZeroInt) Float) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.larzt Ptr CChar
directPtr Ptr CChar
storevPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
vPtr Ptr CInt
ldvPtr Ptr Float
tauPtr Ptr Float
tPtr Ptr CInt
ldtPtr
IO (Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
t
las2 ::
Float ->
Float ->
Float ->
IO (Float, Float)
las2 :: Float -> Float -> Float -> IO (Float, Float)
las2 Float
f Float
g Float
h = do
ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float) IO (Float, Float) -> IO (Float, Float))
-> ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
fPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
f
Ptr Float
gPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
g
Ptr Float
hPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
h
Ptr Float
ssminPtr <- FortranIO (Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
ssmaxPtr <- FortranIO (Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float) IO ()
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float) IO ())
-> IO () -> ContT (Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Float
-> Ptr Float -> Ptr Float -> Ptr Float -> Ptr Float -> IO ()
FFI.las2 Ptr Float
fPtr Ptr Float
gPtr Ptr Float
hPtr Ptr Float
ssminPtr Ptr Float
ssmaxPtr
IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float) -> ContT (Float, Float) IO (Float, Float))
-> IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> (Float, Float))
-> IO (Float -> Float -> (Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Float -> (Float, Float))
-> IO Float -> IO (Float -> (Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
ssminPtr
IO (Float -> (Float, Float)) -> IO Float -> IO (Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
ssmaxPtr
lascl ::
Char ->
Int ->
Int ->
Float ->
Float ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
lascl :: Char
-> Int
-> Int
-> Float
-> Float
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
lascl Char
type_ Int
kl Int
ku Float
cfrom Float
cto Int
m IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
type_Ptr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
type_
Ptr CInt
klPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr Float
cfromPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
cfrom
Ptr Float
ctoPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
cto
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lascl Ptr CChar
type_Ptr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr Float
cfromPtr Ptr Float
ctoPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lasd0 ::
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Int ->
Int ->
Int ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)
lasd0 :: Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Int
-> Int
-> Int
-> Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
lasd0 Int
sqre IOArray ZeroInt Float
d IOArray ZeroInt Float
e Int
ldu Int
m Int
ldvt Int
smlsiz = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"lasd0: m-1 == eDim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
IOArray (ZeroInt, ZeroInt) Float
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldu
IOArray (ZeroInt, ZeroInt) Float
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
m Int
ldvt
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
mInt -> Int -> Int
forall a. Num a => a -> Int -> a
^!Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
m)
ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
sqrePtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
uPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr Float
vtPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vt
Ptr CInt
ldvtPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
Ptr CInt
smlsizPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
smlsiz
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lasd0 Ptr CInt
nPtr Ptr CInt
sqrePtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr Float
vtPtr Ptr CInt
ldvtPtr Ptr CInt
smlsizPtr Ptr CInt
iworkPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
u
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vt
IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lasd1 ::
Int ->
Int ->
Int ->
IOArray ZeroInt Float ->
Float ->
Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt CInt ->
IO (Float, Float, Int)
lasd1 :: Int
-> Int
-> Int
-> IOArray ZeroInt Float
-> Float
-> Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt CInt
-> IO (Float, Float, Int)
lasd1 Int
nl Int
nr Int
sqre IOArray ZeroInt Float
d Float
alpha Float
beta IOArray (ZeroInt, ZeroInt) Float
u IOArray (ZeroInt, ZeroInt) Float
vt IOArray ZeroInt CInt
idxq = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let (Int
uDim0,Int
uDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
u
let (Int
vtDim0,Int
vtDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
vt
let idxqDim0 :: Int
idxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
idxq
let n :: Int
n = Int
uDim0
let ldu :: Int
ldu = Int
uDim1
let m :: Int
m = Int
vtDim0
let ldvt :: Int
ldvt = Int
vtDim1
String -> Bool -> IO ()
Call.assert String
"lasd1: nl+nr+1 == dDim0" (Int
nlInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nrInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
String -> Bool -> IO ()
Call.assert String
"lasd1: n == idxqDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
idxqDim0)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
mInt -> Int -> Int
forall a. Num a => a -> Int -> a
^!Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
m)
ContT (Float, Float, Int) IO (Float, Float, Int)
-> IO (Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float, Int) IO (Float, Float, Int)
-> IO (Float, Float, Int))
-> ContT (Float, Float, Int) IO (Float, Float, Int)
-> IO (Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nlPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nl
Ptr CInt
nrPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nr
Ptr CInt
sqrePtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO (Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
alphaPtr <- Float -> FortranIO (Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
alpha
Ptr Float
betaPtr <- Float -> FortranIO (Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
beta
Ptr Float
uPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u
Ptr CInt
lduPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr Float
vtPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vt
Ptr CInt
ldvtPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
Ptr CInt
idxqPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idxq
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float, Int) IO ()
forall a. IO a -> ContT (Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Int) IO ())
-> IO () -> ContT (Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lasd1 Ptr CInt
nlPtr Ptr CInt
nrPtr Ptr CInt
sqrePtr Ptr Float
dPtr Ptr Float
alphaPtr Ptr Float
betaPtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr Float
vtPtr Ptr CInt
ldvtPtr Ptr CInt
idxqPtr Ptr CInt
iworkPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Float, Float, Int)
-> ContT (Float, Float, Int) IO (Float, Float, Int)
forall a. IO a -> ContT (Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Int)
-> ContT (Float, Float, Int) IO (Float, Float, Int))
-> IO (Float, Float, Int)
-> ContT (Float, Float, Int) IO (Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> Int -> (Float, Float, Int))
-> IO (Float -> Float -> Int -> (Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO (Float -> Float -> Int -> (Float, Float, Int))
-> IO Float -> IO (Float -> Int -> (Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
alphaPtr
IO (Float -> Int -> (Float, Float, Int))
-> IO Float -> IO (Int -> (Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
betaPtr
IO (Int -> (Float, Float, Int)) -> IO Int -> IO (Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lasd2 ::
Int ->
Int ->
Int ->
IOArray ZeroInt Float ->
Float ->
Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IOArray ZeroInt CInt ->
IO (Int, Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int)
lasd2 :: Int
-> Int
-> Int
-> IOArray ZeroInt Float
-> Float
-> Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IOArray ZeroInt CInt
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
lasd2 Int
nl Int
nr Int
sqre IOArray ZeroInt Float
d Float
alpha Float
beta IOArray (ZeroInt, ZeroInt) Float
u IOArray (ZeroInt, ZeroInt) Float
vt Int
ldu2 Int
ldvt2 IOArray ZeroInt CInt
idxq = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let (Int
uDim0,Int
uDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
u
let (Int
vtDim0,Int
vtDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
vt
let idxqDim0 :: Int
idxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
idxq
let n :: Int
n = Int
dDim0
let ldu :: Int
ldu = Int
uDim1
let _m :: Int
_m = Int
vtDim0
let ldvt :: Int
ldvt = Int
vtDim1
String -> Bool -> IO ()
Call.assert String
"lasd2: n == uDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
uDim0)
String -> Bool -> IO ()
Call.assert String
"lasd2: n == idxqDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
idxqDim0)
IOArray ZeroInt Float
z <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
dsigma <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
u2 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldu2
IOArray (ZeroInt, ZeroInt) Float
vt2 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvt2
IOArray ZeroInt CInt
idxp <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
idx <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
idxc <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
coltyp <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nlPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nl
Ptr CInt
nrPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nr
Ptr CInt
sqrePtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
Ptr CInt
kPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
zPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
z
Ptr Float
alphaPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
alpha
Ptr Float
betaPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
beta
Ptr Float
uPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr Float
vtPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vt
Ptr CInt
ldvtPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
Ptr Float
dsigmaPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dsigma
Ptr Float
u2Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u2
Ptr CInt
ldu2Ptr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu2
Ptr Float
vt2Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vt2
Ptr CInt
ldvt2Ptr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt2
Ptr CInt
idxpPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idxp
Ptr CInt
idxPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idx
Ptr CInt
idxcPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idxc
Ptr CInt
idxqPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idxq
Ptr CInt
coltypPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
coltyp
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lasd2 Ptr CInt
nlPtr Ptr CInt
nrPtr Ptr CInt
sqrePtr Ptr CInt
kPtr Ptr Float
dPtr Ptr Float
zPtr Ptr Float
alphaPtr Ptr Float
betaPtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr Float
vtPtr Ptr CInt
ldvtPtr Ptr Float
dsigmaPtr Ptr Float
u2Ptr Ptr CInt
ldu2Ptr Ptr Float
vt2Ptr Ptr CInt
ldvt2Ptr Ptr CInt
idxpPtr Ptr CInt
idxPtr Ptr CInt
idxcPtr Ptr CInt
idxqPtr Ptr CInt
coltypPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
kPtr)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
z
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
dsigma
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
u2
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vt2
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
idxp
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
idx
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
idxc
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
coltyp
IO
(Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lasd3 ::
Int ->
Int ->
Int ->
Int ->
IOArray ZeroInt Float ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
IOArray ZeroInt Float ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)
lasd3 :: Int
-> Int
-> Int
-> Int
-> IOArray ZeroInt Float
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> IOArray ZeroInt Float
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
lasd3 Int
nl Int
nr Int
sqre Int
ldq IOArray ZeroInt Float
dsigma Int
ldu Array (ZeroInt, ZeroInt) Float
u2 Int
m Int
ldvt IOArray (ZeroInt, ZeroInt) Float
vt2 Array ZeroInt CInt
idxc Array ZeroInt CInt
ctot IOArray ZeroInt Float
z = do
let dsigmaDim0 :: Int
dsigmaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
dsigma
let (Int
u2Dim0,Int
u2Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
u2
let (Int
vt2Dim0,Int
vt2Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
vt2
let idxcDim0 :: Int
idxcDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
idxc
let ctotDim0 :: Int
ctotDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ctot
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
z
let k :: Int
k = Int
dsigmaDim0
let n :: Int
n = Int
u2Dim0
let ldu2 :: Int
ldu2 = Int
u2Dim1
let ldvt2 :: Int
ldvt2 = Int
vt2Dim1
String -> Bool -> IO ()
Call.assert String
"lasd3: n == vt2Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vt2Dim0)
String -> Bool -> IO ()
Call.assert String
"lasd3: n == idxcDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
idxcDim0)
String -> Bool -> IO ()
Call.assert String
"lasd3: 4 == ctotDim0" (Int
4 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ctotDim0)
String -> Bool -> IO ()
Call.assert String
"lasd3: k == zDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
k
IOArray (ZeroInt, ZeroInt) Float
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
k Int
ldq
IOArray (ZeroInt, ZeroInt) Float
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldu
IOArray (ZeroInt, ZeroInt) Float
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
m Int
ldvt
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nlPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nl
Ptr CInt
nrPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nr
Ptr CInt
sqrePtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
Ptr CInt
kPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
dsigmaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dsigma
Ptr Float
uPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr Float
u2Ptr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
u2
Ptr CInt
ldu2Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu2
Ptr Float
vtPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vt
Ptr CInt
ldvtPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
Ptr Float
vt2Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vt2
Ptr CInt
ldvt2Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt2
Ptr CInt
idxcPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
idxc
Ptr CInt
ctotPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ctot
Ptr Float
zPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
z
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lasd3 Ptr CInt
nlPtr Ptr CInt
nrPtr Ptr CInt
sqrePtr Ptr CInt
kPtr Ptr Float
dPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
dsigmaPtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr Float
u2Ptr Ptr CInt
ldu2Ptr Ptr Float
vtPtr Ptr CInt
ldvtPtr Ptr Float
vt2Ptr Ptr CInt
ldvt2Ptr Ptr CInt
idxcPtr Ptr CInt
ctotPtr Ptr Float
zPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
q
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
u
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vt
IO
(Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lasd4 ::
Int ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Float ->
IO (Array ZeroInt Float, Float, Int)
lasd4 :: Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> IO (Array ZeroInt Float, Float, Int)
lasd4 Int
i Array ZeroInt Float
d Array ZeroInt Float
z Float
rho = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
z
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"lasd4: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
delta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Float, Int)
IO
(Array ZeroInt Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Float, Int)
IO
(Array ZeroInt Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Int))
-> ContT
(Array ZeroInt Float, Float, Int)
IO
(Array ZeroInt Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iPtr <- Int -> FortranIO (Array ZeroInt Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
zPtr <- Array ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
z
Ptr Float
deltaPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
delta
Ptr Float
rhoPtr <- Float -> FortranIO (Array ZeroInt Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rho
Ptr Float
sigmaPtr <- FortranIO (Array ZeroInt Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lasd4 Ptr CInt
nPtr Ptr CInt
iPtr Ptr Float
dPtr Ptr Float
zPtr Ptr Float
deltaPtr Ptr Float
rhoPtr Ptr Float
sigmaPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Int)
IO
(Array ZeroInt Float, Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Int)
IO
(Array ZeroInt Float, Float, Int))
-> IO (Array ZeroInt Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Int)
IO
(Array ZeroInt Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Float -> Int -> (Array ZeroInt Float, Float, Int))
-> IO
(Array ZeroInt Float
-> Float -> Int -> (Array ZeroInt Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Float -> Int -> (Array ZeroInt Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Float -> Int -> (Array ZeroInt Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
delta
IO (Float -> Int -> (Array ZeroInt Float, Float, Int))
-> IO Float -> IO (Int -> (Array ZeroInt Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
sigmaPtr
IO (Int -> (Array ZeroInt Float, Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lasd5 ::
Int ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Float ->
IO (Array ZeroInt Float, Float)
lasd5 :: Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> IO (Array ZeroInt Float, Float)
lasd5 Int
i Array ZeroInt Float
d Array ZeroInt Float
z Float
rho = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
z
String -> Bool -> IO ()
Call.assert String
"lasd5: 2 == dDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
String -> Bool -> IO ()
Call.assert String
"lasd5: 2 == zDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
delta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
ContT (Array ZeroInt Float, Float) IO (Array ZeroInt Float, Float)
-> IO (Array ZeroInt Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Float) IO (Array ZeroInt Float, Float)
-> IO (Array ZeroInt Float, Float))
-> ContT
(Array ZeroInt Float, Float) IO (Array ZeroInt Float, Float)
-> IO (Array ZeroInt Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
iPtr <- Int -> FortranIO (Array ZeroInt Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
zPtr <- Array ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
z
Ptr Float
deltaPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
delta
Ptr Float
rhoPtr <- Float -> FortranIO (Array ZeroInt Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rho
Ptr Float
dsigmaPtr <- FortranIO (Array ZeroInt Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO () -> ContT (Array ZeroInt Float, Float) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.lasd5 Ptr CInt
iPtr Ptr Float
dPtr Ptr Float
zPtr Ptr Float
deltaPtr Ptr Float
rhoPtr Ptr Float
dsigmaPtr Ptr Float
workPtr
IO (Array ZeroInt Float, Float)
-> ContT
(Array ZeroInt Float, Float) IO (Array ZeroInt Float, Float)
forall a. IO a -> ContT (Array ZeroInt Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float)
-> ContT
(Array ZeroInt Float, Float) IO (Array ZeroInt Float, Float))
-> IO (Array ZeroInt Float, Float)
-> ContT
(Array ZeroInt Float, Float) IO (Array ZeroInt Float, Float)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Float -> (Array ZeroInt Float, Float))
-> IO
(Array ZeroInt Float -> Float -> (Array ZeroInt Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Float -> (Array ZeroInt Float, Float))
-> IO (Array ZeroInt Float)
-> IO (Float -> (Array ZeroInt Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
delta
IO (Float -> (Array ZeroInt Float, Float))
-> IO Float -> IO (Array ZeroInt Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dsigmaPtr
lasd6 ::
Int ->
Int ->
Int ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Float ->
Float ->
IOArray ZeroInt CInt ->
Int ->
Int ->
Int ->
IO (Float, Float, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
lasd6 :: Int
-> Int
-> Int
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Float
-> IOArray ZeroInt CInt
-> Int
-> Int
-> Int
-> IO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
lasd6 Int
icompq Int
nl Int
nr Int
sqre IOArray ZeroInt Float
d IOArray ZeroInt Float
vf IOArray ZeroInt Float
vl Float
alpha Float
beta IOArray ZeroInt CInt
idxq Int
ldgcol Int
ldgnum Int
difrSize = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let vfDim0 :: Int
vfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vf
let vlDim0 :: Int
vlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vl
let idxqDim0 :: Int
idxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
idxq
let m :: Int
m = Int
vfDim0
let n :: Int
n = Int
idxqDim0
String -> Bool -> IO ()
Call.assert String
"lasd6: nl+nr+1 == dDim0" (Int
nlInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nrInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
String -> Bool -> IO ()
Call.assert String
"lasd6: m == vlDim0" (Int
m Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vlDim0)
IOArray ZeroInt CInt
perm <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) CInt
givcol <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) CInt)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
2 Int
ldgcol
IOArray (ZeroInt, ZeroInt) Float
givnum <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
2 Int
ldgnum
IOArray (ZeroInt, ZeroInt) Float
poles <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
2 Int
ldgnum
IOArray ZeroInt Float
difl <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
difr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
difrSize
IOArray ZeroInt Float
z <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
m)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
-> IO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
-> IO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> ContT
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
-> IO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
icompqPtr <- Int
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
Ptr CInt
nlPtr <- Int
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nl
Ptr CInt
nrPtr <- Int
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nr
Ptr CInt
sqrePtr <- Int
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
vfPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vf
Ptr Float
vlPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vl
Ptr Float
alphaPtr <- Float
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
alpha
Ptr Float
betaPtr <- Float
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
beta
Ptr CInt
idxqPtr <- IOArray ZeroInt CInt
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idxq
Ptr CInt
permPtr <- IOArray ZeroInt CInt
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
perm
Ptr CInt
givptrPtr <- FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
givcolPtr <- IOArray (ZeroInt, ZeroInt) CInt
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) CInt
givcol
Ptr CInt
ldgcolPtr <- Int
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgcol
Ptr Float
givnumPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
givnum
Ptr CInt
ldgnumPtr <- Int
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgnum
Ptr Float
polesPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
poles
Ptr Float
diflPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
difl
Ptr Float
difrPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
difr
Ptr Float
zPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
z
Ptr CInt
kPtr <- FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
cPtr <- FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
sPtr <- FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
()
forall a.
IO a
-> ContT
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
())
-> IO ()
-> ContT
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lasd6 Ptr CInt
icompqPtr Ptr CInt
nlPtr Ptr CInt
nrPtr Ptr CInt
sqrePtr Ptr Float
dPtr Ptr Float
vfPtr Ptr Float
vlPtr Ptr Float
alphaPtr Ptr Float
betaPtr Ptr CInt
idxqPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr CInt
ldgcolPtr Ptr Float
givnumPtr Ptr CInt
ldgnumPtr Ptr Float
polesPtr Ptr Float
diflPtr Ptr Float
difrPtr Ptr Float
zPtr Ptr CInt
kPtr Ptr Float
cPtr Ptr Float
sPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
-> ContT
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
forall a.
IO a
-> ContT
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
-> ContT
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
-> ContT
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float
-> Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO
(Float
-> Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,,,)
IO
(Float
-> Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO Float
-> IO
(Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
alphaPtr
IO
(Float
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO Float
-> IO
(Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
betaPtr
IO
(Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
perm
IO
(Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
givptrPtr)
IO
(Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO (Array (ZeroInt, ZeroInt) CInt)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) CInt
-> IO (Array (ZeroInt, ZeroInt) CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) CInt
givcol
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
givnum
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
poles
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
difl
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
difr
IO
(Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
z
IO
(Int
-> Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO Int
-> IO
(Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
kPtr)
IO
(Float
-> Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO Float
-> IO
(Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
cPtr
IO
(Float
-> Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO Float
-> IO
(Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
sPtr
IO
(Int
-> (Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO Int
-> IO
(Float, Float, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lasd7 ::
Int ->
Int ->
Int ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Float ->
Float ->
Array ZeroInt CInt ->
Int ->
Int ->
IO (Int, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Float, Float, Float, Int)
lasd7 :: Int
-> Int
-> Int
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Float
-> Array ZeroInt CInt
-> Int
-> Int
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
lasd7 Int
icompq Int
nl Int
nr Int
sqre IOArray ZeroInt Float
d IOArray ZeroInt Float
vf IOArray ZeroInt Float
vl Float
alpha Float
beta Array ZeroInt CInt
idxq Int
ldgcol Int
ldgnum = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let vfDim0 :: Int
vfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vf
let vlDim0 :: Int
vlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vl
let idxqDim0 :: Int
idxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
idxq
let n :: Int
n = Int
dDim0
let m :: Int
m = Int
vfDim0
String -> Bool -> IO ()
Call.assert String
"lasd7: m == vlDim0" (Int
m Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vlDim0)
String -> Bool -> IO ()
Call.assert String
"lasd7: n == idxqDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
idxqDim0)
IOArray ZeroInt Float
z <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Float
zw <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Float
vfw <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Float
vlw <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Float
dsigma <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
idx <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
idxp <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
perm <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) CInt
givcol <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) CInt)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
2 Int
ldgcol
IOArray (ZeroInt, ZeroInt) Float
givnum <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
2 Int
ldgnum
ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
icompqPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
Ptr CInt
nlPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nl
Ptr CInt
nrPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nr
Ptr CInt
sqrePtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
Ptr CInt
kPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
zPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
z
Ptr Float
zwPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
zw
Ptr Float
vfPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vf
Ptr Float
vfwPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vfw
Ptr Float
vlPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vl
Ptr Float
vlwPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vlw
Ptr Float
alphaPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
alpha
Ptr Float
betaPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
beta
Ptr Float
dsigmaPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dsigma
Ptr CInt
idxPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idx
Ptr CInt
idxpPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idxp
Ptr CInt
idxqPtr <- Array ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
idxq
Ptr CInt
permPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
perm
Ptr CInt
givptrPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
givcolPtr <- IOArray (ZeroInt, ZeroInt) CInt
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) CInt
givcol
Ptr CInt
ldgcolPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgcol
Ptr Float
givnumPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
givnum
Ptr CInt
ldgnumPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgnum
Ptr Float
cPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
sPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lasd7 Ptr CInt
icompqPtr Ptr CInt
nlPtr Ptr CInt
nrPtr Ptr CInt
sqrePtr Ptr CInt
kPtr Ptr Float
dPtr Ptr Float
zPtr Ptr Float
zwPtr Ptr Float
vfPtr Ptr Float
vfwPtr Ptr Float
vlPtr Ptr Float
vlwPtr Ptr Float
alphaPtr Ptr Float
betaPtr Ptr Float
dsigmaPtr Ptr CInt
idxPtr Ptr CInt
idxpPtr Ptr CInt
idxqPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr CInt
ldgcolPtr Ptr Float
givnumPtr Ptr CInt
ldgnumPtr Ptr Float
cPtr Ptr Float
sPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
-> ContT
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
kPtr)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
z
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
zw
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
vfw
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
vlw
IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
dsigma
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
idx
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
idxp
IO
(Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
perm
IO
(Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
givptrPtr)
IO
(Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO (Array (ZeroInt, ZeroInt) CInt)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) CInt
-> IO (Array (ZeroInt, ZeroInt) CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) CInt
givcol
IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
givnum
IO
(Float
-> Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO Float
-> IO
(Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
cPtr
IO
(Float
-> Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO Float
-> IO
(Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
sPtr
IO
(Int
-> (Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lasd8 ::
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Int ->
Int ->
IOArray ZeroInt Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Int)
lasd8 :: Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Int
-> Int
-> IOArray ZeroInt Float
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
lasd8 Int
icompq IOArray ZeroInt Float
z IOArray ZeroInt Float
vf IOArray ZeroInt Float
vl Int
difrSize Int
lddifr IOArray ZeroInt Float
dsigma = do
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
z
let vfDim0 :: Int
vfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vf
let vlDim0 :: Int
vlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vl
let dsigmaDim0 :: Int
dsigmaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
dsigma
let k :: Int
k = Int
zDim0
String -> Bool -> IO ()
Call.assert String
"lasd8: k == vfDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vfDim0)
String -> Bool -> IO ()
Call.assert String
"lasd8: k == vlDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vlDim0)
String -> Bool -> IO ()
Call.assert String
"lasd8: k == dsigmaDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dsigmaDim0)
IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
k
IOArray ZeroInt Float
difl <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
k
IOArray (ZeroInt, ZeroInt) Float
difr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
difrSize Int
lddifr
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
k)
ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
icompqPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
Ptr CInt
kPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
zPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
z
Ptr Float
vfPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vf
Ptr Float
vlPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vl
Ptr Float
diflPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
difl
Ptr Float
difrPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
difr
Ptr CInt
lddifrPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lddifr
Ptr Float
dsigmaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dsigma
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lasd8 Ptr CInt
icompqPtr Ptr CInt
kPtr Ptr Float
dPtr Ptr Float
zPtr Ptr Float
vfPtr Ptr Float
vlPtr Ptr Float
diflPtr Ptr Float
difrPtr Ptr CInt
lddifrPtr Ptr Float
dsigmaPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
difl
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
difr
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lasda ::
Int ->
Int ->
Int ->
IOArray ZeroInt Float ->
Array ZeroInt Float ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Float, Array ZeroInt Float, Array ZeroInt Float, Int)
lasda :: Int
-> Int
-> Int
-> IOArray ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
lasda Int
icompq Int
smlsiz Int
sqre IOArray ZeroInt Float
d Array ZeroInt Float
e Int
uSize Int
ldu Int
vtSize Int
kSize Int
nlvl Int
difrSize Int
zSize Int
polesSize Int
givptrSize Int
givcolSize Int
ldgcol Int
permSize Int
givnumSize Int
cSize Int
sSize Int
workSize = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Int -> IO ()
Call.ignore String
"lasda: m-1 == eDim0" Int
eDim0
IOArray (ZeroInt, ZeroInt) Float
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
uSize Int
ldu
IOArray (ZeroInt, ZeroInt) Float
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
vtSize Int
ldu
IOArray ZeroInt CInt
k <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kSize
IOArray (ZeroInt, ZeroInt) Float
difl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nlvl Int
ldu
IOArray (ZeroInt, ZeroInt) Float
difr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
difrSize Int
ldu
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
zSize Int
ldu
IOArray (ZeroInt, ZeroInt) Float
poles <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
polesSize Int
ldu
IOArray ZeroInt CInt
givptr <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
givptrSize
IOArray (ZeroInt, ZeroInt) CInt
givcol <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) CInt)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
givcolSize Int
ldgcol
IOArray (ZeroInt, ZeroInt) CInt
perm <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) CInt)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
permSize Int
ldgcol
IOArray (ZeroInt, ZeroInt) Float
givnum <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
givnumSize Int
ldu
IOArray ZeroInt Float
c <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
cSize
IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
sSize
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
7Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
icompqPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
Ptr CInt
smlsizPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
smlsiz
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
sqrePtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- Array ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e
Ptr Float
uPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr Float
vtPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vt
Ptr CInt
kPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
k
Ptr Float
diflPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
difl
Ptr Float
difrPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
difr
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr Float
polesPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
poles
Ptr CInt
givptrPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
givptr
Ptr CInt
givcolPtr <- IOArray (ZeroInt, ZeroInt) CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) CInt
givcol
Ptr CInt
ldgcolPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgcol
Ptr CInt
permPtr <- IOArray (ZeroInt, ZeroInt) CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) CInt
perm
Ptr Float
givnumPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
givnum
Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lasda Ptr CInt
icompqPtr Ptr CInt
smlsizPtr Ptr CInt
nPtr Ptr CInt
sqrePtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr Float
vtPtr Ptr CInt
kPtr Ptr Float
diflPtr Ptr Float
difrPtr Ptr Float
zPtr Ptr Float
polesPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr CInt
ldgcolPtr Ptr CInt
permPtr Ptr Float
givnumPtr Ptr Float
cPtr Ptr Float
sPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,,,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
u
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
vt
IO
(Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
k
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
difl
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
difr
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
poles
IO
(Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
givptr
IO
(Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) CInt)
-> IO
(Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) CInt
-> IO (Array (ZeroInt, ZeroInt) CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) CInt
givcol
IO
(Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) CInt)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) CInt
-> IO (Array (ZeroInt, ZeroInt) CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) CInt
perm
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
givnum
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
c
IO
(Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) CInt,
Array (ZeroInt, ZeroInt) Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lasdq ::
Char ->
Int ->
Int ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
lasdq :: Char
-> Int
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
lasdq Char
uplo Int
sqre Int
nru IOArray ZeroInt Float
d IOArray ZeroInt Float
e IOArray (ZeroInt, ZeroInt) Float
vt IOArray (ZeroInt, ZeroInt) Float
u IOArray (ZeroInt, ZeroInt) Float
c = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let (Int
vtDim0,Int
vtDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
vt
let (Int
uDim0,Int
uDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
u
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let n :: Int
n = Int
dDim0
let ncvt :: Int
ncvt = Int
vtDim0
let ldvt :: Int
ldvt = Int
vtDim1
let ldu :: Int
ldu = Int
uDim1
let ncc :: Int
ncc = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
String -> Bool -> IO ()
Call.assert String
"lasdq: n-1+sqre == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
sqre Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"lasdq: n == uDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
uDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
sqrePtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
ncvtPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ncvt
Ptr CInt
nruPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nru
Ptr CInt
nccPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ncc
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
vtPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vt
Ptr CInt
ldvtPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
Ptr Float
uPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u
Ptr CInt
lduPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lasdq Ptr CChar
uploPtr Ptr CInt
sqrePtr Ptr CInt
nPtr Ptr CInt
ncvtPtr Ptr CInt
nruPtr Ptr CInt
nccPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
vtPtr Ptr CInt
ldvtPtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lasdt ::
Int ->
Int ->
IO (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt)
lasdt :: Int
-> Int
-> IO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
lasdt Int
n Int
msub = do
IOArray ZeroInt CInt
inode <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
ndiml <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
ndimr <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
IO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
-> IO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
IO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
-> IO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt))
-> ContT
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
IO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
-> IO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
lvlPtr <- FortranIO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
ndPtr <- FortranIO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
inodePtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
inode
Ptr CInt
ndimlPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ndiml
Ptr CInt
ndimrPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ndimr
Ptr CInt
msubPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
msub
IO ()
-> ContT
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
IO
()
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
IO
())
-> IO ()
-> ContT
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lasdt Ptr CInt
nPtr Ptr CInt
lvlPtr Ptr CInt
ndPtr Ptr CInt
inodePtr Ptr CInt
ndimlPtr Ptr CInt
ndimrPtr Ptr CInt
msubPtr
IO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
-> ContT
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
IO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
-> ContT
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
IO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt))
-> IO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
-> ContT
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
IO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
forall a b. (a -> b) -> a -> b
$ (Int
-> Int
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt))
-> IO
(Int
-> Int
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Int
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt))
-> IO Int
-> IO
(Int
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
lvlPtr)
IO
(Int
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt))
-> IO Int
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ndPtr)
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
inode
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ndiml
IO
(Array ZeroInt CInt
-> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt))
-> IO (Array ZeroInt CInt)
-> IO
(Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
Array ZeroInt CInt)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ndimr
laset ::
Char ->
Int ->
Int ->
Float ->
Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float)
laset :: Char
-> Int
-> Int
-> Float
-> Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float)
laset Char
uplo Int
m Int
n Float
alpha Float
beta Int
lda = do
IOArray (ZeroInt, ZeroInt) Float
a <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
lda
ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
-> IO (Array (ZeroInt, ZeroInt) Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
-> IO (Array (ZeroInt, ZeroInt) Float))
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
-> IO (Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
mPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
alphaPtr <- Float -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
alpha
Ptr Float
betaPtr <- Float -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
beta
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
IO () -> ContT (Array (ZeroInt, ZeroInt) Float) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laset Ptr CChar
uploPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
alphaPtr Ptr Float
betaPtr Ptr Float
aPtr Ptr CInt
ldaPtr
IO (Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array (ZeroInt, ZeroInt) Float)
IO
(Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
a
lasq1 ::
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IO (Int)
lasq1 :: IOArray ZeroInt Float -> IOArray ZeroInt Float -> IO Int
lasq1 IOArray ZeroInt Float
d IOArray ZeroInt Float
e = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"lasq1: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float -> Ptr Float -> Ptr Float -> Ptr CInt -> IO ()
FFI.lasq1 Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lasq2 ::
Int ->
IOArray ZeroInt Float ->
IO (Int)
lasq2 :: Int -> IOArray ZeroInt Float -> IO Int
lasq2 Int
n IOArray ZeroInt Float
z = do
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
z
String -> Bool -> IO ()
Call.assert String
"lasq2: 4*n == zDim0" (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
zPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
z
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr Float -> Ptr CInt -> IO ()
FFI.lasq2 Ptr CInt
nPtr Ptr Float
zPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lasq4 ::
Int ->
Int ->
Array ZeroInt Float ->
Int ->
Int ->
Float ->
Float ->
Float ->
Float ->
Float ->
Float ->
Float ->
IO (Float, Int, Float)
lasq4 :: Int
-> Int
-> Array ZeroInt Float
-> Int
-> Int
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> IO (Float, Int, Float)
lasq4 Int
i0 Int
n0 Array ZeroInt Float
z Int
pp Int
n0in Float
dmin Float
dmin1 Float
dmin2 Float
dn Float
dn1 Float
dn2 Float
g = do
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
z
String -> Bool -> IO ()
Call.assert String
"lasq4: 4*n0 == zDim0" (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n0 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
ContT (Float, Int, Float) IO (Float, Int, Float)
-> IO (Float, Int, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int, Float) IO (Float, Int, Float)
-> IO (Float, Int, Float))
-> ContT (Float, Int, Float) IO (Float, Int, Float)
-> IO (Float, Int, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
i0Ptr <- Int -> FortranIO (Float, Int, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i0
Ptr CInt
n0Ptr <- Int -> FortranIO (Float, Int, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n0
Ptr Float
zPtr <- Array ZeroInt Float -> FortranIO (Float, Int, Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
z
Ptr CInt
ppPtr <- Int -> FortranIO (Float, Int, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
pp
Ptr CInt
n0inPtr <- Int -> FortranIO (Float, Int, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n0in
Ptr Float
dminPtr <- Float -> FortranIO (Float, Int, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
dmin
Ptr Float
dmin1Ptr <- Float -> FortranIO (Float, Int, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
dmin1
Ptr Float
dmin2Ptr <- Float -> FortranIO (Float, Int, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
dmin2
Ptr Float
dnPtr <- Float -> FortranIO (Float, Int, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
dn
Ptr Float
dn1Ptr <- Float -> FortranIO (Float, Int, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
dn1
Ptr Float
dn2Ptr <- Float -> FortranIO (Float, Int, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
dn2
Ptr Float
tauPtr <- FortranIO (Float, Int, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
ttypePtr <- FortranIO (Float, Int, Float) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
gPtr <- Float -> FortranIO (Float, Int, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
g
IO () -> ContT (Float, Int, Float) IO ()
forall a. IO a -> ContT (Float, Int, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int, Float) IO ())
-> IO () -> ContT (Float, Int, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> IO ()
FFI.lasq4 Ptr CInt
i0Ptr Ptr CInt
n0Ptr Ptr Float
zPtr Ptr CInt
ppPtr Ptr CInt
n0inPtr Ptr Float
dminPtr Ptr Float
dmin1Ptr Ptr Float
dmin2Ptr Ptr Float
dnPtr Ptr Float
dn1Ptr Ptr Float
dn2Ptr Ptr Float
tauPtr Ptr CInt
ttypePtr Ptr Float
gPtr
IO (Float, Int, Float)
-> ContT (Float, Int, Float) IO (Float, Int, Float)
forall a. IO a -> ContT (Float, Int, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int, Float)
-> ContT (Float, Int, Float) IO (Float, Int, Float))
-> IO (Float, Int, Float)
-> ContT (Float, Int, Float) IO (Float, Int, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> Float -> (Float, Int, Float))
-> IO (Float -> Int -> Float -> (Float, Int, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO (Float -> Int -> Float -> (Float, Int, Float))
-> IO Float -> IO (Int -> Float -> (Float, Int, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
tauPtr
IO (Int -> Float -> (Float, Int, Float))
-> IO Int -> IO (Float -> (Float, Int, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ttypePtr)
IO (Float -> (Float, Int, Float))
-> IO Float -> IO (Float, Int, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
gPtr
lasq5 ::
Int ->
Int ->
Array ZeroInt Float ->
Int ->
Float ->
Float ->
Bool ->
Float ->
IO (Float, Float, Float, Float, Float, Float)
lasq5 :: Int
-> Int
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Bool
-> Float
-> IO (Float, Float, Float, Float, Float, Float)
lasq5 Int
i0 Int
n0 Array ZeroInt Float
z Int
pp Float
tau Float
sigma Bool
ieee Float
eps = do
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
z
String -> Int -> IO ()
Call.ignore String
"lasq5: 4*n == zDim0" Int
zDim0
ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float, Float))
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
i0Ptr <- Int
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i0
Ptr CInt
n0Ptr <- Int
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n0
Ptr Float
zPtr <- Array ZeroInt Float
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
z
Ptr CInt
ppPtr <- Int
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
pp
Ptr Float
tauPtr <- Float
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tau
Ptr Float
sigmaPtr <- Float
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sigma
Ptr Float
dminPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
dmin1Ptr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
dmin2Ptr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
dnPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
dnm1Ptr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
dnm2Ptr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Bool
ieeePtr <- Bool
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
ieee
Ptr Float
epsPtr <- Float
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
eps
IO () -> ContT (Float, Float, Float, Float, Float, Float) IO ()
forall a.
IO a -> ContT (Float, Float, Float, Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Float, Float, Float, Float) IO ())
-> IO () -> ContT (Float, Float, Float, Float, Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Bool
-> Ptr Float
-> IO ()
FFI.lasq5 Ptr CInt
i0Ptr Ptr CInt
n0Ptr Ptr Float
zPtr Ptr CInt
ppPtr Ptr Float
tauPtr Ptr Float
sigmaPtr Ptr Float
dminPtr Ptr Float
dmin1Ptr Ptr Float
dmin2Ptr Ptr Float
dnPtr Ptr Float
dnm1Ptr Ptr Float
dnm2Ptr Ptr Bool
ieeePtr Ptr Float
epsPtr
IO (Float, Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
forall a.
IO a -> ContT (Float, Float, Float, Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float))
-> IO (Float, Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dminPtr
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dmin1Ptr
IO
(Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float -> Float -> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dmin2Ptr
IO
(Float
-> Float -> Float -> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float -> Float -> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dnPtr
IO (Float -> Float -> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO (Float -> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dnm1Ptr
IO (Float -> (Float, Float, Float, Float, Float, Float))
-> IO Float -> IO (Float, Float, Float, Float, Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dnm2Ptr
lasq6 ::
Int ->
Int ->
Array ZeroInt Float ->
Int ->
IO (Float, Float, Float, Float, Float, Float)
lasq6 :: Int
-> Int
-> Array ZeroInt Float
-> Int
-> IO (Float, Float, Float, Float, Float, Float)
lasq6 Int
i0 Int
n0 Array ZeroInt Float
z Int
pp = do
let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
z
String -> Int -> IO ()
Call.ignore String
"lasq6: 4*n == zDim0" Int
zDim0
ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float, Float))
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
i0Ptr <- Int
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i0
Ptr CInt
n0Ptr <- Int
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n0
Ptr Float
zPtr <- Array ZeroInt Float
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
z
Ptr CInt
ppPtr <- Int
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
pp
Ptr Float
dminPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
dmin1Ptr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
dmin2Ptr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
dnPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
dnm1Ptr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
dnm2Ptr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float, Float, Float, Float, Float) IO ()
forall a.
IO a -> ContT (Float, Float, Float, Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Float, Float, Float, Float) IO ())
-> IO () -> ContT (Float, Float, Float, Float, Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.lasq6 Ptr CInt
i0Ptr Ptr CInt
n0Ptr Ptr Float
zPtr Ptr CInt
ppPtr Ptr Float
dminPtr Ptr Float
dmin1Ptr Ptr Float
dmin2Ptr Ptr Float
dnPtr Ptr Float
dnm1Ptr Ptr Float
dnm2Ptr
IO (Float, Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
forall a.
IO a -> ContT (Float, Float, Float, Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float))
-> IO (Float, Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dminPtr
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dmin1Ptr
IO
(Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float -> Float -> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dmin2Ptr
IO
(Float
-> Float -> Float -> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float -> Float -> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dnPtr
IO (Float -> Float -> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO (Float -> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dnm1Ptr
IO (Float -> (Float, Float, Float, Float, Float, Float))
-> IO Float -> IO (Float, Float, Float, Float, Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
dnm2Ptr
lasr ::
Char ->
Char ->
Char ->
Int ->
Array ZeroInt Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO ()
lasr :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO ()
lasr Char
side Char
pivot Char
direct Int
m Array ZeroInt Float
c Array ZeroInt Float
s IOArray (ZeroInt, ZeroInt) Float
a = do
let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
c
let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
s
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let _cSize :: Int
_cSize = Int
cDim0
let _sSize :: Int
_sSize = Int
sDim0
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
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
$ do
Ptr CChar
sidePtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
pivotPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
pivot
Ptr CChar
directPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
direct
Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
cPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
c
Ptr Float
sPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
s
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lasr Ptr CChar
sidePtr Ptr CChar
pivotPtr Ptr CChar
directPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
cPtr Ptr Float
sPtr Ptr Float
aPtr Ptr CInt
ldaPtr
lasrt ::
Char ->
IOArray ZeroInt Float ->
IO (Int)
lasrt :: Char -> IOArray ZeroInt Float -> IO Int
lasrt Char
id_ IOArray ZeroInt Float
d = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let n :: Int
n = Int
dDim0
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
id_Ptr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
id_
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> Ptr CInt -> Ptr Float -> Ptr CInt -> IO ()
FFI.lasrt Ptr CChar
id_Ptr Ptr CInt
nPtr Ptr Float
dPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lassq ::
Array ZeroInt Float ->
Int ->
Float ->
Float ->
IO (Float, Float)
lassq :: Array ZeroInt Float -> Int -> Float -> Float -> IO (Float, Float)
lassq Array ZeroInt Float
x Int
incx Float
scale Float
sumsq = do
let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
x
let n :: Int
n = Int
xDim0
ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float) IO (Float, Float) -> IO (Float, Float))
-> ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
xPtr <- Array ZeroInt Float -> FortranIO (Float, Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
x
Ptr CInt
incxPtr <- Int -> FortranIO (Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr Float
scalePtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
scale
Ptr Float
sumsqPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sumsq
IO () -> ContT (Float, Float) IO ()
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float) IO ())
-> IO () -> ContT (Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float -> Ptr CInt -> Ptr Float -> Ptr Float -> IO ()
FFI.lassq Ptr CInt
nPtr Ptr Float
xPtr Ptr CInt
incxPtr Ptr Float
scalePtr Ptr Float
sumsqPtr
IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float) -> ContT (Float, Float) IO (Float, Float))
-> IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> (Float, Float))
-> IO (Float -> Float -> (Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Float -> (Float, Float))
-> IO Float -> IO (Float -> (Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
IO (Float -> (Float, Float)) -> IO Float -> IO (Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
sumsqPtr
lasv2 ::
Float ->
Float ->
Float ->
IO (Float, Float, Float, Float, Float, Float)
lasv2 :: Float
-> Float -> Float -> IO (Float, Float, Float, Float, Float, Float)
lasv2 Float
f Float
g Float
h = do
ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float, Float))
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
-> IO (Float, Float, Float, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr Float
fPtr <- Float
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
f
Ptr Float
gPtr <- Float
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
g
Ptr Float
hPtr <- Float
-> FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
h
Ptr Float
ssminPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
ssmaxPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
snrPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
csrPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
snlPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
cslPtr <- FortranIO (Float, Float, Float, Float, Float, Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float, Float, Float, Float, Float) IO ()
forall a.
IO a -> ContT (Float, Float, Float, Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Float, Float, Float, Float) IO ())
-> IO () -> ContT (Float, Float, Float, Float, Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.lasv2 Ptr Float
fPtr Ptr Float
gPtr Ptr Float
hPtr Ptr Float
ssminPtr Ptr Float
ssmaxPtr Ptr Float
snrPtr Ptr Float
csrPtr Ptr Float
snlPtr Ptr Float
cslPtr
IO (Float, Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
forall a.
IO a -> ContT (Float, Float, Float, Float, Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float))
-> IO (Float, Float, Float, Float, Float, Float)
-> ContT
(Float, Float, Float, Float, Float, Float)
IO
(Float, Float, Float, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
ssminPtr
IO
(Float
-> Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
ssmaxPtr
IO
(Float
-> Float
-> Float
-> Float
-> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float
-> Float -> Float -> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
snrPtr
IO
(Float
-> Float -> Float -> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO
(Float -> Float -> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
csrPtr
IO (Float -> Float -> (Float, Float, Float, Float, Float, Float))
-> IO Float
-> IO (Float -> (Float, Float, Float, Float, Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
snlPtr
IO (Float -> (Float, Float, Float, Float, Float, Float))
-> IO Float -> IO (Float, Float, Float, Float, Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
cslPtr
laswp ::
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Array ZeroInt CInt ->
Int ->
IO ()
laswp :: IOArray (ZeroInt, ZeroInt) Float
-> Int -> Int -> Array ZeroInt CInt -> Int -> IO ()
laswp IOArray (ZeroInt, ZeroInt) Float
a Int
k1 Int
k2 Array ZeroInt CInt
ipiv Int
incx = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"laswp: k1+(k2-k1)*abs(incx) == ipivDim0" (Int
k1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
k2Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
k1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int -> Int
forall a. Num a => a -> a
abs(Int
incx) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
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
$ do
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
k1Ptr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k1
Ptr CInt
k2Ptr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k2
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO () (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laswp Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
k1Ptr Ptr CInt
k2Ptr Ptr CInt
ipivPtr Ptr CInt
incxPtr
lasy2 ::
Bool ->
Bool ->
Int ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO (Float, Array (ZeroInt,ZeroInt) Float, Float, Int)
lasy2 :: Bool
-> Bool
-> Int
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> IO (Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
lasy2 Bool
ltranl Bool
ltranr Int
isgn Int
n1 Int
n2 Array (ZeroInt, ZeroInt) Float
tl Array (ZeroInt, ZeroInt) Float
tr Array (ZeroInt, ZeroInt) Float
b Int
ldx = do
let (Int
tlDim0,Int
tlDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
tl
let (Int
trDim0,Int
trDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
tr
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let ldtl :: Int
ldtl = Int
tlDim1
let ldtr :: Int
ldtr = Int
trDim1
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"lasy2: 2 == tlDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tlDim0)
String -> Bool -> IO ()
Call.assert String
"lasy2: 2 == trDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
trDim0)
String -> Bool -> IO ()
Call.assert String
"lasy2: 2 == bDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray (ZeroInt, ZeroInt) Float
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
2 Int
ldx
ContT
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
IO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
-> IO (Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
IO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
-> IO (Float, Array (ZeroInt, ZeroInt) Float, Float, Int))
-> ContT
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
IO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
-> IO (Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
ltranlPtr <- Bool
-> FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
ltranl
Ptr Bool
ltranrPtr <- Bool
-> FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
ltranr
Ptr CInt
isgnPtr <- Int
-> FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
isgn
Ptr CInt
n1Ptr <- Int
-> FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n1
Ptr CInt
n2Ptr <- Int
-> FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n2
Ptr Float
tlPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
tl
Ptr CInt
ldtlPtr <- Int
-> FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldtl
Ptr Float
trPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
tr
Ptr CInt
ldtrPtr <- Int
-> FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldtr
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
scalePtr <- FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
xnormPtr <- FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Float, Array (ZeroInt, ZeroInt) Float, Float, Int) IO ()
forall a.
IO a
-> ContT (Float, Array (ZeroInt, ZeroInt) Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Float, Array (ZeroInt, ZeroInt) Float, Float, Int) IO ())
-> IO ()
-> ContT (Float, Array (ZeroInt, ZeroInt) Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lasy2 Ptr Bool
ltranlPtr Ptr Bool
ltranrPtr Ptr CInt
isgnPtr Ptr CInt
n1Ptr Ptr CInt
n2Ptr Ptr Float
tlPtr Ptr CInt
ldtlPtr Ptr Float
trPtr Ptr CInt
ldtrPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
scalePtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
xnormPtr Ptr CInt
infoPtr
IO (Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
-> ContT
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
IO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
forall a.
IO a
-> ContT (Float, Array (ZeroInt, ZeroInt) Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
-> ContT
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
IO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int))
-> IO (Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
-> ContT
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
IO
(Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Int
-> (Float, Array (ZeroInt, ZeroInt) Float, Float, Int))
-> IO
(Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Int
-> (Float, Array (ZeroInt, ZeroInt) Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Float
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Int
-> (Float, Array (ZeroInt, ZeroInt) Float, Float, Int))
-> IO Float
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Int
-> (Float, Array (ZeroInt, ZeroInt) Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Int
-> (Float, Array (ZeroInt, ZeroInt) Float, Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Float
-> Int -> (Float, Array (ZeroInt, ZeroInt) Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
x
IO
(Float
-> Int -> (Float, Array (ZeroInt, ZeroInt) Float, Float, Int))
-> IO Float
-> IO (Int -> (Float, Array (ZeroInt, ZeroInt) Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
xnormPtr
IO (Int -> (Float, Array (ZeroInt, ZeroInt) Float, Float, Int))
-> IO Int -> IO (Float, Array (ZeroInt, ZeroInt) Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lasyf ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) Float, Int)
lasyf :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
lasyf Char
uplo Int
nb IOArray (ZeroInt, ZeroInt) Float
a Int
ldw = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
w <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldw
ContT
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nbPtr <- Int
-> FortranIO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
Ptr CInt
kbPtr <- FortranIO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr Float
wPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
w
Ptr CInt
ldwPtr <- Int
-> FortranIO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldw
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lasyf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nbPtr Ptr CInt
kbPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
wPtr Ptr CInt
ldwPtr Ptr CInt
infoPtr
IO (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
IO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Int
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Int
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO
(Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
kbPtr)
IO
(Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ipiv
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
w
IO
(Int
-> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO
(Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
latbs ::
Char ->
Char ->
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IO (Float, Int)
latbs :: Char
-> Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IO (Float, Int)
latbs Char
uplo Char
trans Char
diag Char
normin Int
kd Array (ZeroInt, ZeroInt) Float
ab IOArray ZeroInt Float
x IOArray ZeroInt Float
cnorm = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
x
let cnormDim0 :: Int
cnormDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
cnorm
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
String -> Bool -> IO ()
Call.assert String
"latbs: n == xDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
String -> Bool -> IO ()
Call.assert String
"latbs: n == cnormDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cnormDim0)
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CChar
norminPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
normin
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
xPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
Ptr Float
scalePtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
cnormPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
cnorm
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.latbs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CChar
norminPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
xPtr Ptr Float
scalePtr Ptr Float
cnormPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
latdf ::
Int ->
Array (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt Float ->
Float ->
Float ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
IO (Float, Float)
latdf :: Int
-> Array (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt Float
-> Float
-> Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> IO (Float, Float)
latdf Int
ijob Array (ZeroInt, ZeroInt) Float
z IOArray ZeroInt Float
rhs Float
rdsum Float
rdscal Array ZeroInt CInt
ipiv Array ZeroInt CInt
jpiv = do
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
z
let rhsDim0 :: Int
rhsDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
rhs
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let jpivDim0 :: Int
jpivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
jpiv
let n :: Int
n = Int
zDim0
let ldz :: Int
ldz = Int
zDim1
let _rhsSize :: Int
_rhsSize = Int
rhsDim0
String -> Bool -> IO ()
Call.assert String
"latdf: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
String -> Bool -> IO ()
Call.assert String
"latdf: n == jpivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
jpivDim0)
ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float) IO (Float, Float) -> IO (Float, Float))
-> ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
ijobPtr <- Int -> FortranIO (Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
Ptr CInt
nPtr <- Int -> FortranIO (Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
zPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int -> FortranIO (Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
rhsPtr <- IOArray ZeroInt Float -> FortranIO (Float, Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rhs
Ptr Float
rdsumPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rdsum
Ptr Float
rdscalPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rdscal
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Float, Float) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr CInt
jpivPtr <- Array ZeroInt CInt -> FortranIO (Float, Float) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
jpiv
IO () -> ContT (Float, Float) IO ()
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float) IO ())
-> IO () -> ContT (Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.latdf Ptr CInt
ijobPtr Ptr CInt
nPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
rhsPtr Ptr Float
rdsumPtr Ptr Float
rdscalPtr Ptr CInt
ipivPtr Ptr CInt
jpivPtr
IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a. IO a -> ContT (Float, Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float) -> ContT (Float, Float) IO (Float, Float))
-> IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> (Float, Float))
-> IO (Float -> Float -> (Float, Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Float -> (Float, Float))
-> IO Float -> IO (Float -> (Float, Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rdsumPtr
IO (Float -> (Float, Float)) -> IO Float -> IO (Float, Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rdscalPtr
latps ::
Char ->
Char ->
Char ->
Char ->
Array ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IO (Float, Int)
latps :: Char
-> Char
-> Char
-> Char
-> Array ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IO (Float, Int)
latps Char
uplo Char
trans Char
diag Char
normin Array ZeroInt Float
ap IOArray ZeroInt Float
x IOArray ZeroInt Float
cnorm = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
x
let cnormDim0 :: Int
cnormDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
cnorm
let n :: Int
n = Int
xDim0
String -> Bool -> IO ()
Call.assert String
"latps: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
String -> Bool -> IO ()
Call.assert String
"latps: n == cnormDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cnormDim0)
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CChar
norminPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
normin
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
xPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
Ptr Float
scalePtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
cnormPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
cnorm
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.latps Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CChar
norminPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
xPtr Ptr Float
scalePtr Ptr Float
cnormPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
latrd ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float)
latrd :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
latrd Char
uplo Int
nb IOArray (ZeroInt, ZeroInt) Float
a Int
ldw = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray (ZeroInt, ZeroInt) Float
w <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldw
ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
wPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
w
Ptr CInt
ldwPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldw
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.latrd Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nbPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
ePtr Ptr Float
tauPtr Ptr Float
wPtr Ptr CInt
ldwPtr
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float))
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO
(Array (ZeroInt, ZeroInt) Float
-> (Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt Float, Array ZeroInt Float,
Array (ZeroInt, ZeroInt) Float)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
w
latrs ::
Char ->
Char ->
Char ->
Char ->
Array (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IO (Float, Int)
latrs :: Char
-> Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IO (Float, Int)
latrs Char
uplo Char
trans Char
diag Char
normin Array (ZeroInt, ZeroInt) Float
a IOArray ZeroInt Float
x IOArray ZeroInt Float
cnorm = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
x
let cnormDim0 :: Int
cnormDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
cnorm
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"latrs: n == xDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
String -> Bool -> IO ()
Call.assert String
"latrs: n == cnormDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cnormDim0)
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CChar
norminPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
normin
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
xPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
x
Ptr Float
scalePtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
cnormPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
cnorm
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.latrs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CChar
norminPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
xPtr Ptr Float
scalePtr Ptr Float
cnormPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
latrz ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float)
latrz :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float)
latrz Int
m Int
l IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float))
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
lPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
l
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
IO () -> ContT (Array ZeroInt Float) IO ()
forall a. IO a -> ContT (Array ZeroInt Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float) IO ())
-> IO () -> ContT (Array ZeroInt Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.latrz Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
lPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr
IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
forall a. IO a -> ContT (Array ZeroInt Float) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float))
-> IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
lauu2 ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
lauu2 :: Char -> IOArray (ZeroInt, ZeroInt) Float -> IO Int
lauu2 Char
uplo IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> Ptr CInt -> Ptr Float -> Ptr CInt -> Ptr CInt -> IO ()
FFI.lauu2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
lauum ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
lauum :: Char -> IOArray (ZeroInt, ZeroInt) Float -> IO Int
lauum Char
uplo IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> Ptr CInt -> Ptr Float -> Ptr CInt -> Ptr CInt -> IO ()
FFI.lauum Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
orbdb ::
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
orbdb :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
orbdb Char
trans Char
signs Int
m Int
p IOArray (ZeroInt, ZeroInt) Float
x11 IOArray (ZeroInt, ZeroInt) Float
x12 IOArray (ZeroInt, ZeroInt) Float
x21 IOArray (ZeroInt, ZeroInt) Float
x22 Int
lwork = do
let (Int
x11Dim0,Int
x11Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x11
let (Int
x12Dim0,Int
x12Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x12
let (Int
x21Dim0,Int
x21Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x21
let (Int
x22Dim0,Int
x22Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x22
let q :: Int
q = Int
x11Dim0
let ldx11 :: Int
ldx11 = Int
x11Dim1
let ldx12 :: Int
ldx12 = Int
x12Dim1
let ldx21 :: Int
ldx21 = Int
x21Dim1
let ldx22 :: Int
ldx22 = Int
x22Dim1
String -> Bool -> IO ()
Call.assert String
"orbdb: m-q == x12Dim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x12Dim0)
String -> Bool -> IO ()
Call.assert String
"orbdb: q == x21Dim0" (Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x21Dim0)
String -> Bool -> IO ()
Call.assert String
"orbdb: m-q == x22Dim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x22Dim0)
IOArray ZeroInt Float
theta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
IOArray ZeroInt Float
phi <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
qInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
taup1 <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
p
IOArray ZeroInt Float
taup2 <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
p)
IOArray ZeroInt Float
tauq1 <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
IOArray ZeroInt Float
tauq2 <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
signsPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
signs
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
pPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr CInt
qPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
q
Ptr Float
x11Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x11
Ptr CInt
ldx11Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx11
Ptr Float
x12Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x12
Ptr CInt
ldx12Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx12
Ptr Float
x21Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x21
Ptr CInt
ldx21Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx21
Ptr Float
x22Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x22
Ptr CInt
ldx22Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx22
Ptr Float
thetaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
theta
Ptr Float
phiPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
phi
Ptr Float
taup1Ptr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
taup1
Ptr Float
taup2Ptr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
taup2
Ptr Float
tauq1Ptr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tauq1
Ptr Float
tauq2Ptr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tauq2
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orbdb Ptr CChar
transPtr Ptr CChar
signsPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
qPtr Ptr Float
x11Ptr Ptr CInt
ldx11Ptr Ptr Float
x12Ptr Ptr CInt
ldx12Ptr Ptr Float
x21Ptr Ptr CInt
ldx21Ptr Ptr Float
x22Ptr Ptr CInt
ldx22Ptr Ptr Float
thetaPtr Ptr Float
phiPtr Ptr Float
taup1Ptr Ptr Float
taup2Ptr Ptr Float
tauq1Ptr Ptr Float
tauq2Ptr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
theta
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
phi
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
taup1
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
taup2
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tauq1
IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tauq2
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
orcsd ::
Char ->
Char ->
Char ->
Char ->
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Array (ZeroInt,ZeroInt) Float, Int)
orcsd :: Char
-> Char
-> Char
-> Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
orcsd Char
jobu1 Char
jobu2 Char
jobv1t Char
jobv2t Char
trans Char
signs Int
m Int
p IOArray (ZeroInt, ZeroInt) Float
x11 IOArray (ZeroInt, ZeroInt) Float
x12 IOArray (ZeroInt, ZeroInt) Float
x21 IOArray (ZeroInt, ZeroInt) Float
x22 Int
r Int
ldu1 Int
ldu2 Int
ldv1t Int
ldv2t Int
lwork = do
let (Int
x11Dim0,Int
x11Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x11
let (Int
x12Dim0,Int
x12Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x12
let (Int
x21Dim0,Int
x21Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x21
let (Int
x22Dim0,Int
x22Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x22
let q :: Int
q = Int
x11Dim0
let ldx11 :: Int
ldx11 = Int
x11Dim1
let ldx12 :: Int
ldx12 = Int
x12Dim1
let ldx21 :: Int
ldx21 = Int
x21Dim1
let ldx22 :: Int
ldx22 = Int
x22Dim1
String -> Bool -> IO ()
Call.assert String
"orcsd: m-q == x12Dim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x12Dim0)
String -> Bool -> IO ()
Call.assert String
"orcsd: q == x21Dim0" (Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x21Dim0)
String -> Bool -> IO ()
Call.assert String
"orcsd: m-q == x22Dim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x22Dim0)
IOArray ZeroInt Float
theta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
r
IOArray (ZeroInt, ZeroInt) Float
u1 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
p Int
ldu1
IOArray (ZeroInt, ZeroInt) Float
u2 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
p) Int
ldu2
IOArray (ZeroInt, ZeroInt) Float
v1t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
q Int
ldv1t
IOArray (ZeroInt, ZeroInt) Float
v2t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q) Int
ldv2t
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-[Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
p,Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
p,Int
q,Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q])
ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobu1Ptr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu1
Ptr CChar
jobu2Ptr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu2
Ptr CChar
jobv1tPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv1t
Ptr CChar
jobv2tPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv2t
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
signsPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
signs
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
pPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr CInt
qPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
q
Ptr Float
x11Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x11
Ptr CInt
ldx11Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx11
Ptr Float
x12Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x12
Ptr CInt
ldx12Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx12
Ptr Float
x21Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x21
Ptr CInt
ldx21Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx21
Ptr Float
x22Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x22
Ptr CInt
ldx22Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx22
Ptr Float
thetaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
theta
Ptr Float
u1Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u1
Ptr CInt
ldu1Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu1
Ptr Float
u2Ptr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u2
Ptr CInt
ldu2Ptr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu2
Ptr Float
v1tPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v1t
Ptr CInt
ldv1tPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv1t
Ptr Float
v2tPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v2t
Ptr CInt
ldv2tPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv2t
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orcsd Ptr CChar
jobu1Ptr Ptr CChar
jobu2Ptr Ptr CChar
jobv1tPtr Ptr CChar
jobv2tPtr Ptr CChar
transPtr Ptr CChar
signsPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
qPtr Ptr Float
x11Ptr Ptr CInt
ldx11Ptr Ptr Float
x12Ptr Ptr CInt
ldx12Ptr Ptr Float
x21Ptr Ptr CInt
ldx21Ptr Ptr Float
x22Ptr Ptr CInt
ldx22Ptr Ptr Float
thetaPtr Ptr Float
u1Ptr Ptr CInt
ldu1Ptr Ptr Float
u2Ptr Ptr CInt
ldu2Ptr Ptr Float
v1tPtr Ptr CInt
ldv1tPtr Ptr Float
v2tPtr Ptr CInt
ldv2tPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
theta
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
u1
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
u2
IO
(Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
v1t
IO
(Array (ZeroInt, ZeroInt) Float
-> Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
v2t
IO
(Int
-> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Array (ZeroInt, ZeroInt) Float,
Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pbcon ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Float ->
IO (Float, Int)
pbcon :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> IO (Float, Int)
pbcon Char
uplo Int
kd Array (ZeroInt, ZeroInt) Float
ab Float
anorm = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbcon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pbequ ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Float, Float, Int)
pbequ :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Float, Float, Int)
pbequ Char
uplo Int
kd Array (ZeroInt, ZeroInt) Float
ab = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int))
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
scondPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
amaxPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.pbequ Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
-> IO
(Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
IO
(Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float
-> IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scondPtr
IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float -> IO (Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
IO (Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pbrfs ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
pbrfs :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
pbrfs Char
uplo Int
kd Array (ZeroInt, ZeroInt) Float
ab Array (ZeroInt, ZeroInt) Float
afb Array (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
x = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let (Int
afbDim0,Int
afbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
afb
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let ldafb :: Int
ldafb = Int
afbDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldx :: Int
ldx = Int
xDim1
String -> Bool -> IO ()
Call.assert String
"pbrfs: n == afbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afbDim0)
String -> Bool -> IO ()
Call.assert String
"pbrfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
afbPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
afb
Ptr CInt
ldafbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldafb
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbrfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
afbPtr Ptr CInt
ldafbPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pbstf ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
pbstf :: Char -> Int -> IOArray (ZeroInt, ZeroInt) Float -> IO Int
pbstf Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) Float
ab = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbstf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pbsv ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
pbsv :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
pbsv Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) Float
ab IOArray (ZeroInt, ZeroInt) Float
b = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbsv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pbsvx ::
Char ->
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Char ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Char, Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)
pbsvx :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Char
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
pbsvx Char
fact Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) Float
ab IOArray (ZeroInt, ZeroInt) Float
afb Char
equed IOArray ZeroInt Float
s IOArray (ZeroInt, ZeroInt) Float
b Int
ldx = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let (Int
afbDim0,Int
afbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
afb
let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
s
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let ldafb :: Int
ldafb = Int
afbDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"pbsvx: n == afbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afbDim0)
String -> Bool -> IO ()
Call.assert String
"pbsvx: n == sDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
IOArray (ZeroInt, ZeroInt) Float
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
uploPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
afbPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
afb
Ptr CInt
ldafbPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldafb
Ptr CChar
equedPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
rcondPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CChar
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbsvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
afbPtr Ptr CInt
ldafbPtr Ptr CChar
equedPtr Ptr Float
sPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Char
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CChar -> Char) -> IO CChar -> IO Char
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CChar -> Char
castCCharToChar (Ptr CChar -> IO CChar
forall a. Storable a => Ptr a -> IO a
peek Ptr CChar
equedPtr)
IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
x
IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pbtf2 ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
pbtf2 :: Char -> Int -> IOArray (ZeroInt, ZeroInt) Float -> IO Int
pbtf2 Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) Float
ab = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbtf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pbtrf ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
pbtrf :: Char -> Int -> IOArray (ZeroInt, ZeroInt) Float -> IO Int
pbtrf Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) Float
ab = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr Float
abPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbtrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pbtrs ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
pbtrs :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
pbtrs Char
uplo Int
kd Array (ZeroInt, ZeroInt) Float
ab IOArray (ZeroInt, ZeroInt) Float
b = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbtrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pftrf ::
Char ->
Char ->
Int ->
IOArray ZeroInt Float ->
IO (Int)
pftrf :: Char -> Char -> Int -> IOArray ZeroInt Float -> IO Int
pftrf Char
transr Char
uplo Int
n IOArray ZeroInt Float
a = do
let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
a
String -> Bool -> IO ()
Call.assert String
"pftrf: n*(n+1)`div`2 == aDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transrPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
a
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar -> Ptr CInt -> Ptr Float -> Ptr CInt -> IO ()
FFI.pftrf Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pftri ::
Char ->
Char ->
Int ->
IOArray ZeroInt Float ->
IO (Int)
pftri :: Char -> Char -> Int -> IOArray ZeroInt Float -> IO Int
pftri Char
transr Char
uplo Int
n IOArray ZeroInt Float
a = do
let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
a
String -> Bool -> IO ()
Call.assert String
"pftri: n*(n+1)`div`2 == aDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transrPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
a
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar -> Ptr CInt -> Ptr Float -> Ptr CInt -> IO ()
FFI.pftri Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pftrs ::
Char ->
Char ->
Int ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
pftrs :: Char
-> Char
-> Int
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
pftrs Char
transr Char
uplo Int
n Array ZeroInt Float
a IOArray (ZeroInt, ZeroInt) Float
b = do
let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"pftrs: n*(n+1)`div`2 == aDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transrPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
a
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pftrs Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pocon ::
Char ->
Array (ZeroInt,ZeroInt) Float ->
Float ->
IO (Float, Int)
pocon :: Char -> Array (ZeroInt, ZeroInt) Float -> Float -> IO (Float, Int)
pocon Char
uplo Array (ZeroInt, ZeroInt) Float
a Float
anorm = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pocon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
poequ ::
Array (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Float, Float, Int)
poequ :: Array (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Float, Float, Int)
poequ Array (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int))
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
scondPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
amaxPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.poequ Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
-> IO
(Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
IO
(Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float
-> IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scondPtr
IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float -> IO (Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
IO (Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
poequb ::
Array (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Float, Float, Int)
poequb :: Array (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Float, Float, Int)
poequb Array (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int))
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
scondPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
amaxPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.poequb Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
-> IO
(Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
IO
(Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float
-> IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scondPtr
IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float -> IO (Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
IO (Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
porfs ::
Char ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
porfs :: Char
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
porfs Char
uplo Array (ZeroInt, ZeroInt) Float
a Array (ZeroInt, ZeroInt) Float
af Array (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
x = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let (Int
afDim0,Int
afDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
af
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldaf :: Int
ldaf = Int
afDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldx :: Int
ldx = Int
xDim1
String -> Bool -> IO ()
Call.assert String
"porfs: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
String -> Bool -> IO ()
Call.assert String
"porfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
afPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
af
Ptr CInt
ldafPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.porfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
afPtr Ptr CInt
ldafPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
posv ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
posv :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
posv Char
uplo IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.posv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
posvx ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Char ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Char, Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)
posvx :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Char
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
posvx Char
fact Char
uplo IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
af Char
equed IOArray ZeroInt Float
s IOArray (ZeroInt, ZeroInt) Float
b Int
ldx = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
afDim0,Int
afDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
af
let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
s
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldaf :: Int
ldaf = Int
afDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"posvx: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
String -> Bool -> IO ()
Call.assert String
"posvx: n == sDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
IOArray (ZeroInt, ZeroInt) Float
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
uploPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
afPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
af
Ptr CInt
ldafPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
Ptr CChar
equedPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
rcondPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CChar
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.posvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
afPtr Ptr CInt
ldafPtr Ptr CChar
equedPtr Ptr Float
sPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Char
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CChar -> Char) -> IO CChar -> IO Char
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CChar -> Char
castCCharToChar (Ptr CChar -> IO CChar
forall a. Storable a => Ptr a -> IO a
peek Ptr CChar
equedPtr)
IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
x
IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
potf2 ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
potf2 :: Char -> IOArray (ZeroInt, ZeroInt) Float -> IO Int
potf2 Char
uplo IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> Ptr CInt -> Ptr Float -> Ptr CInt -> Ptr CInt -> IO ()
FFI.potf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
potrf ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
potrf :: Char -> IOArray (ZeroInt, ZeroInt) Float -> IO Int
potrf Char
uplo IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> Ptr CInt -> Ptr Float -> Ptr CInt -> Ptr CInt -> IO ()
FFI.potrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
potri ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
potri :: Char -> IOArray (ZeroInt, ZeroInt) Float -> IO Int
potri Char
uplo IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> Ptr CInt -> Ptr Float -> Ptr CInt -> Ptr CInt -> IO ()
FFI.potri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
potrs ::
Char ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
potrs :: Char
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
potrs Char
uplo Array (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.potrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ppcon ::
Char ->
Int ->
Array ZeroInt Float ->
Float ->
IO (Float, Int)
ppcon :: Char -> Int -> Array ZeroInt Float -> Float -> IO (Float, Int)
ppcon Char
uplo Int
n Array ZeroInt Float
ap Float
anorm = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"ppcon: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ppcon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ppequ ::
Char ->
Int ->
Array ZeroInt Float ->
IO (Array ZeroInt Float, Float, Float, Int)
ppequ :: Char
-> Int
-> Array ZeroInt Float
-> IO (Array ZeroInt Float, Float, Float, Int)
ppequ Char
uplo Int
n Array ZeroInt Float
ap = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"ppequ: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int))
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- Array ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
scondPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
amaxPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ppequ Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
-> IO
(Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
IO
(Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float
-> IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scondPtr
IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float -> IO (Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
IO (Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pprfs ::
Char ->
Int ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
pprfs :: Char
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
pprfs Char
uplo Int
n Array ZeroInt Float
ap Array ZeroInt Float
afp Array (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
x = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
let afpDim0 :: Int
afpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
afp
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldx :: Int
ldx = Int
xDim1
String -> Bool -> IO ()
Call.assert String
"pprfs: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
String -> Bool -> IO ()
Call.assert String
"pprfs: n*(n+1)`div`2 == afpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afpDim0)
String -> Bool -> IO ()
Call.assert String
"pprfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
apPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
afpPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
afp
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pprfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
apPtr Ptr Float
afpPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ppsv ::
Char ->
Int ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
ppsv :: Char
-> Int
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
ppsv Char
uplo Int
n IOArray ZeroInt Float
ap IOArray (ZeroInt, ZeroInt) Float
b = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"ppsv: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
apPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ppsv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
apPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ppsvx ::
Char ->
Char ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Char ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Char, Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)
ppsvx :: Char
-> Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Char
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
ppsvx Char
fact Char
uplo IOArray ZeroInt Float
ap IOArray ZeroInt Float
afp Char
equed IOArray ZeroInt Float
s IOArray (ZeroInt, ZeroInt) Float
b Int
ldx = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
let afpDim0 :: Int
afpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
afp
let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
s
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
sDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"ppsvx: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
String -> Bool -> IO ()
Call.assert String
"ppsvx: n*(n+1)`div`2 == afpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afpDim0)
IOArray (ZeroInt, ZeroInt) Float
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
uploPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
apPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr Float
afpPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
afp
Ptr CChar
equedPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
rcondPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CChar
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ppsvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
apPtr Ptr Float
afpPtr Ptr CChar
equedPtr Ptr Float
sPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Char
-> Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Char
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CChar -> Char) -> IO CChar -> IO Char
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CChar -> Char
castCCharToChar (Ptr CChar -> IO CChar
forall a. Storable a => Ptr a -> IO a
peek Ptr CChar
equedPtr)
IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
x
IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) Float, Float,
Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Char, Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pptrf ::
Char ->
Int ->
IOArray ZeroInt Float ->
IO (Int)
pptrf :: Char -> Int -> IOArray ZeroInt Float -> IO Int
pptrf Char
uplo Int
n IOArray ZeroInt Float
ap = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"pptrf: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> Ptr CInt -> Ptr Float -> Ptr CInt -> IO ()
FFI.pptrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pptri ::
Char ->
Int ->
IOArray ZeroInt Float ->
IO (Int)
pptri :: Char -> Int -> IOArray ZeroInt Float -> IO Int
pptri Char
uplo Int
n IOArray ZeroInt Float
ap = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"pptri: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> Ptr CInt -> Ptr Float -> Ptr CInt -> IO ()
FFI.pptri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pptrs ::
Char ->
Int ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
pptrs :: Char
-> Int
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
pptrs Char
uplo Int
n Array ZeroInt Float
ap IOArray (ZeroInt, ZeroInt) Float
b = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"pptrs: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
apPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pptrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
apPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pstf2 ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Float ->
IO (Array ZeroInt CInt, Int, Int)
pstf2 :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Float
-> IO (Array ZeroInt CInt, Int, Int)
pstf2 Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Float
tol = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt CInt
piv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
-> IO (Array ZeroInt CInt, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
-> IO (Array ZeroInt CInt, Int, Int))
-> ContT
(Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
-> IO (Array ZeroInt CInt, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
pivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
piv
Ptr CInt
rankPtr <- FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
tolPtr <- Float -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tol
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Int, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.pstf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
pivPtr Ptr CInt
rankPtr Ptr Float
tolPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Int, Int)
-> ContT
(Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
forall a. IO a -> ContT (Array ZeroInt CInt, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Int, Int)
-> ContT
(Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int))
-> IO (Array ZeroInt CInt, Int, Int)
-> ContT
(Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt
-> Int -> Int -> (Array ZeroInt CInt, Int, Int))
-> IO
(Array ZeroInt CInt
-> Int -> Int -> (Array ZeroInt CInt, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt CInt
-> Int -> Int -> (Array ZeroInt CInt, Int, Int))
-> IO (Array ZeroInt CInt)
-> IO (Int -> Int -> (Array ZeroInt CInt, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
piv
IO (Int -> Int -> (Array ZeroInt CInt, Int, Int))
-> IO Int -> IO (Int -> (Array ZeroInt CInt, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
rankPtr)
IO (Int -> (Array ZeroInt CInt, Int, Int))
-> IO Int -> IO (Array ZeroInt CInt, Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pstrf ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Float ->
IO (Array ZeroInt CInt, Int, Int)
pstrf :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Float
-> IO (Array ZeroInt CInt, Int, Int)
pstrf Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Float
tol = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt CInt
piv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
-> IO (Array ZeroInt CInt, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
-> IO (Array ZeroInt CInt, Int, Int))
-> ContT
(Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
-> IO (Array ZeroInt CInt, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
pivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
piv
Ptr CInt
rankPtr <- FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
tolPtr <- Float -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tol
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Int, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.pstrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
pivPtr Ptr CInt
rankPtr Ptr Float
tolPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Int, Int)
-> ContT
(Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
forall a. IO a -> ContT (Array ZeroInt CInt, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Int, Int)
-> ContT
(Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int))
-> IO (Array ZeroInt CInt, Int, Int)
-> ContT
(Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt
-> Int -> Int -> (Array ZeroInt CInt, Int, Int))
-> IO
(Array ZeroInt CInt
-> Int -> Int -> (Array ZeroInt CInt, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt CInt
-> Int -> Int -> (Array ZeroInt CInt, Int, Int))
-> IO (Array ZeroInt CInt)
-> IO (Int -> Int -> (Array ZeroInt CInt, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
piv
IO (Int -> Int -> (Array ZeroInt CInt, Int, Int))
-> IO Int -> IO (Int -> (Array ZeroInt CInt, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
rankPtr)
IO (Int -> (Array ZeroInt CInt, Int, Int))
-> IO Int -> IO (Array ZeroInt CInt, Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ptcon ::
Array ZeroInt Float ->
Array ZeroInt Float ->
Float ->
IO (Float, Int)
ptcon :: Array ZeroInt Float
-> Array ZeroInt Float -> Float -> IO (Float, Int)
ptcon Array ZeroInt Float
d Array ZeroInt Float
e Float
anorm = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"ptcon: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
ePtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e
Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ptcon Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pteqr ::
Char ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
pteqr :: Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
pteqr Char
compz IOArray ZeroInt Float
d IOArray ZeroInt Float
e IOArray (ZeroInt, ZeroInt) Float
z = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let n :: Int
n = Int
dDim0
let ldz :: Int
ldz = Int
zDim1
String -> Bool -> IO ()
Call.assert String
"pteqr: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"pteqr: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
compzPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.pteqr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ptrfs ::
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
ptrfs :: Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
ptrfs Array ZeroInt Float
d Array ZeroInt Float
e Array ZeroInt Float
df Array ZeroInt Float
ef Array (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
x = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e
let dfDim0 :: Int
dfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
df
let efDim0 :: Int
efDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ef
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x
let n :: Int
n = Int
dDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldx :: Int
ldx = Int
xDim1
String -> Bool -> IO ()
Call.assert String
"ptrfs: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"ptrfs: n == dfDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dfDim0)
String -> Bool -> IO ()
Call.assert String
"ptrfs: n-1 == efDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
efDim0)
String -> Bool -> IO ()
Call.assert String
"ptrfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
ePtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e
Ptr Float
dfPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
df
Ptr Float
efPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ef
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ptrfs Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
dfPtr Ptr Float
efPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ptsv ::
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
ptsv :: IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
ptsv IOArray ZeroInt Float
d IOArray ZeroInt Float
e IOArray (ZeroInt, ZeroInt) Float
b = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
dDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"ptsv: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ptsv Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ptsvx ::
Char ->
Array ZeroInt Float ->
Array ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)
ptsvx :: Char
-> Array ZeroInt Float
-> Array ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
ptsvx Char
fact Array ZeroInt Float
d Array ZeroInt Float
e IOArray ZeroInt Float
df IOArray ZeroInt Float
ef Array (ZeroInt, ZeroInt) Float
b Int
ldx = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e
let dfDim0 :: Int
dfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
df
let efDim0 :: Int
efDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ef
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
dDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"ptsvx: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"ptsvx: n == dfDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dfDim0)
String -> Bool -> IO ()
Call.assert String
"ptsvx: n-1 == efDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
efDim0)
IOArray (ZeroInt, ZeroInt) Float
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
ePtr <- Array ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e
Ptr Float
dfPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
df
Ptr Float
efPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ef
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
rcondPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ptsvx Ptr CChar
factPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
dfPtr Ptr Float
efPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
x
IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pttrf ::
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IO (Int)
pttrf :: IOArray ZeroInt Float -> IOArray ZeroInt Float -> IO Int
pttrf IOArray ZeroInt Float
d IOArray ZeroInt Float
e = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"pttrf: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr Float -> Ptr Float -> Ptr CInt -> IO ()
FFI.pttrf Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
pttrs ::
Array ZeroInt Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
pttrs :: Array ZeroInt Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
pttrs Array ZeroInt Float
d Array ZeroInt Float
e IOArray (ZeroInt, ZeroInt) Float
b = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
dDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"pttrs: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
ePtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pttrs Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ptts2 ::
Array ZeroInt Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO ()
ptts2 :: Array ZeroInt Float
-> Array ZeroInt Float -> IOArray (ZeroInt, ZeroInt) Float -> IO ()
ptts2 Array ZeroInt Float
d Array ZeroInt Float
e IOArray (ZeroInt, ZeroInt) Float
b = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
dDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"ptts2: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
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
$ do
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
ePtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ptts2 Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
bPtr Ptr CInt
ldbPtr
rscl ::
Int ->
Float ->
IOArray ZeroInt Float ->
Int ->
IO ()
rscl :: Int -> Float -> IOArray ZeroInt Float -> Int -> IO ()
rscl Int
n Float
sa IOArray ZeroInt Float
sx Int
incx = do
let sxDim0 :: Int
sxDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
sx
let _sxSize :: Int
_sxSize = Int
sxDim0
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
$ do
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
saPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sa
Ptr Float
sxPtr <- IOArray ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
sx
Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr Float -> Ptr Float -> Ptr CInt -> IO ()
FFI.rscl Ptr CInt
nPtr Ptr Float
saPtr Ptr Float
sxPtr Ptr CInt
incxPtr
spcon ::
Char ->
Array ZeroInt Float ->
Array ZeroInt CInt ->
Float ->
IO (Float, Int)
spcon :: Char
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Float
-> IO (Float, Int)
spcon Char
uplo Array ZeroInt Float
ap Array ZeroInt CInt
ipiv Float
anorm = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let n :: Int
n = Int
ipivDim0
String -> Bool -> IO ()
Call.assert String
"spcon: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spcon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr CInt
ipivPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sprfs ::
Char ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
sprfs :: Char
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
sprfs Char
uplo Array ZeroInt Float
ap Array ZeroInt Float
afp Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
x = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
let afpDim0 :: Int
afpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
afp
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x
let n :: Int
n = Int
ipivDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldx :: Int
ldx = Int
xDim1
String -> Bool -> IO ()
Call.assert String
"sprfs: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
String -> Bool -> IO ()
Call.assert String
"sprfs: n*(n+1)`div`2 == afpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afpDim0)
String -> Bool -> IO ()
Call.assert String
"sprfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
apPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
afpPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
afp
Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sprfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
apPtr Ptr Float
afpPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
spsv ::
Char ->
Int ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt CInt, Int)
spsv :: Char
-> Int
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt CInt, Int)
spsv Char
uplo Int
n IOArray ZeroInt Float
ap IOArray (ZeroInt, ZeroInt) Float
b = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"spsv: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
apPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spsv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
apPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt) -> IO (Int -> (Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ipiv
IO (Int -> (Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
spsvx ::
Char ->
Char ->
Array ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray ZeroInt CInt ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)
spsvx :: Char
-> Char
-> Array ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
spsvx Char
fact Char
uplo Array ZeroInt Float
ap IOArray ZeroInt Float
afp IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) Float
b Int
ldx = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
let afpDim0 :: Int
afpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
afp
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
ipivDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"spsvx: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
String -> Bool -> IO ()
Call.assert String
"spsvx: n*(n+1)`div`2 == afpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afpDim0)
IOArray (ZeroInt, ZeroInt) Float
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
apPtr <- Array ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
afpPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
afp
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
rcondPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spsvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
apPtr Ptr Float
afpPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
x
IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sptrf ::
Char ->
Int ->
IOArray ZeroInt Float ->
IO (Array ZeroInt CInt, Int)
sptrf :: Char
-> Int -> IOArray ZeroInt Float -> IO (Array ZeroInt CInt, Int)
sptrf Char
uplo Int
n IOArray ZeroInt Float
ap = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"sptrf: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> Ptr CInt -> Ptr Float -> Ptr CInt -> Ptr CInt -> IO ()
FFI.sptrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr CInt
ipivPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt) -> IO (Int -> (Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ipiv
IO (Int -> (Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sptri ::
Char ->
IOArray ZeroInt Float ->
Array ZeroInt CInt ->
IO (Int)
sptri :: Char -> IOArray ZeroInt Float -> Array ZeroInt CInt -> IO Int
sptri Char
uplo IOArray ZeroInt Float
ap Array ZeroInt CInt
ipiv = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let n :: Int
n = Int
ipivDim0
String -> Bool -> IO ()
Call.assert String
"sptri: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.sptri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr CInt
ipivPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sptrs ::
Char ->
Array ZeroInt Float ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
sptrs :: Char
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
sptrs Char
uplo Array ZeroInt Float
ap Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) Float
b = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
ipivDim0
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"sptrs: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
apPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sptrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
apPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
stebz ::
Char ->
Char ->
Float ->
Float ->
Int ->
Int ->
Float ->
Array ZeroInt Float ->
Array ZeroInt Float ->
IO (Int, Int, Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt, Int)
stebz :: Char
-> Char
-> Float
-> Float
-> Int
-> Int
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
stebz Char
range Char
order Float
vl Float
vu Int
il Int
iu Float
abstol Array ZeroInt Float
d Array ZeroInt Float
e = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"stebz: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
iblock <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
isplit <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
rangePtr <- Char
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
Ptr CChar
orderPtr <- Char
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
order
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
vlPtr <- Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
Ptr CInt
iuPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Float
abstolPtr <- Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
ePtr <- Array ZeroInt Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e
Ptr CInt
mPtr <- FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
nsplitPtr <- FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr CInt
iblockPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iblock
Ptr CInt
isplitPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isplit
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stebz Ptr CChar
rangePtr Ptr CChar
orderPtr Ptr CInt
nPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr Float
dPtr Ptr Float
ePtr Ptr CInt
mPtr Ptr CInt
nsplitPtr Ptr Float
wPtr Ptr CInt
iblockPtr Ptr CInt
isplitPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
-> ContT
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
IO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO
(Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Int
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
nsplitPtr)
IO
(Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
iblock
IO
(Array ZeroInt CInt
-> Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isplit
IO
(Int
-> (Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Int, Int, Array ZeroInt Float, Array ZeroInt CInt,
Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
stedc ::
Char ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IO (Int)
stedc :: Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IO Int
stedc Char
compz IOArray ZeroInt Float
d IOArray ZeroInt Float
e IOArray (ZeroInt, ZeroInt) Float
z Int
lwork Int
liwork = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let n :: Int
n = Int
dDim0
let ldz :: Int
ldz = Int
zDim1
String -> Bool -> IO ()
Call.assert String
"stedc: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"stedc: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
compzPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stedc Ptr CChar
compzPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
stegr ::
Char ->
Char ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Float ->
Float ->
Int ->
Int ->
Float ->
Int ->
Int ->
Int ->
Int ->
IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)
stegr :: Char
-> Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> Int
-> Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
stegr Char
jobz Char
range IOArray ZeroInt Float
d IOArray ZeroInt Float
e Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz Int
lwork Int
liwork = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"stegr: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m]) Int
ldz
IOArray ZeroInt CInt
isuppz <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*[Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
liwork
ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
rangePtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
vlPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
Ptr CInt
iuPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Float
abstolPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
isuppzPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isuppz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stegr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr CInt
isuppzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isuppz
IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
stein ::
Array ZeroInt Float ->
Array ZeroInt Float ->
Int ->
Array ZeroInt Float ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)
stein :: Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
stein Array ZeroInt Float
d Array ZeroInt Float
e Int
m Array ZeroInt Float
w Array ZeroInt CInt
iblock Array ZeroInt CInt
isplit Int
ldz = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e
let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
w
let iblockDim0 :: Int
iblockDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
iblock
let isplitDim0 :: Int
isplitDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
isplit
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"stein: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"stein: n == wDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
String -> Bool -> IO ()
Call.assert String
"stein: n == iblockDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
iblockDim0)
String -> Bool -> IO ()
Call.assert String
"stein: n == isplitDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
isplitDim0)
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
m Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
Ptr Float
ePtr <- Array ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e
Ptr CInt
mPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr Float
wPtr <- Array ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
w
Ptr CInt
iblockPtr <- Array ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
iblock
Ptr CInt
isplitPtr <- Array ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
isplit
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int) IO ()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int) IO ())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stein Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr CInt
mPtr Ptr Float
wPtr Ptr CInt
iblockPtr Ptr CInt
isplitPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int -> (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ifail
IO
(Int -> (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int))
-> IO Int
-> IO (Array (ZeroInt, ZeroInt) Float, Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
stemr ::
Char ->
Char ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Float ->
Float ->
Int ->
Int ->
Int ->
Int ->
Int ->
Bool ->
Int ->
Int ->
IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Bool, Int)
stemr :: Char
-> Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Float
-> Int
-> Int
-> Int
-> Int
-> Int
-> Bool
-> Int
-> Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
stemr Char
jobz Char
range IOArray ZeroInt Float
d IOArray ZeroInt Float
e Float
vl Float
vu Int
il Int
iu Int
m Int
ldz Int
nzc Bool
tryrac Int
lwork Int
liwork = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"stemr: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m]) Int
ldz
IOArray ZeroInt CInt
isuppz <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*[Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
liwork
ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
rangePtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
vlPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
Ptr CInt
iuPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
nzcPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nzc
Ptr CInt
isuppzPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isuppz
Ptr Bool
tryracPtr <- Bool
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
tryrac
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Bool
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stemr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr CInt
nzcPtr Ptr CInt
isuppzPtr Ptr Bool
tryracPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Bool
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isuppz
IO
(Bool
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
-> IO Bool
-> IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Bool -> IO Bool
forall a. Storable a => Ptr a -> IO a
peek Ptr Bool
tryracPtr
IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Bool, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
steqr ::
Char ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
steqr :: Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
steqr Char
compz IOArray ZeroInt Float
d IOArray ZeroInt Float
e IOArray (ZeroInt, ZeroInt) Float
z = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let n :: Int
n = Int
dDim0
let ldz :: Int
ldz = Int
zDim1
String -> Bool -> IO ()
Call.assert String
"steqr: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"steqr: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
compzPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.steqr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sterf ::
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
IO (Int)
sterf :: IOArray ZeroInt Float -> IOArray ZeroInt Float -> IO Int
sterf IOArray ZeroInt Float
d IOArray ZeroInt Float
e = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"sterf: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr Float -> Ptr Float -> Ptr CInt -> IO ()
FFI.sterf Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
stev ::
Char ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Int)
stev :: Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
stev Char
jobz IOArray ZeroInt Float
d IOArray ZeroInt Float
e Int
ldz = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"stev: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2])
ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.stev Ptr CChar
jobzPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
stevd ::
Char ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Int ->
Int ->
Int ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Int)
stevd :: Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Int
-> Int
-> Int
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
stevd Char
jobz IOArray ZeroInt Float
d IOArray ZeroInt Float
e Int
ldz Int
workSize Int
lwork Int
liwork = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"stevd: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stevd Ptr CChar
jobzPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
stevr ::
Char ->
Char ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Float ->
Float ->
Int ->
Int ->
Float ->
Int ->
Int ->
Int ->
Int ->
IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)
stevr :: Char
-> Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> Int
-> Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
stevr Char
jobz Char
range IOArray ZeroInt Float
d IOArray ZeroInt Float
e Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz Int
lwork Int
liwork = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"stevr: maximum[1,n-1] == eDim0" ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1] Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m]) Int
ldz
IOArray ZeroInt CInt
isuppz <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*[Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m])
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
rangePtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
vlPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
Ptr CInt
iuPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Float
abstolPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
isuppzPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isuppz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stevr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr CInt
isuppzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isuppz
IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
stevx ::
Char ->
Char ->
IOArray ZeroInt Float ->
IOArray ZeroInt Float ->
Float ->
Float ->
Int ->
Int ->
Float ->
Int ->
Int ->
IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) Float, Array ZeroInt CInt, Int)
stevx :: Char
-> Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
stevx Char
jobz Char
range IOArray ZeroInt Float
d IOArray ZeroInt Float
e Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz = do
let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"stevx: maximum[1,n-1] == eDim0" ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1] Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) Float
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
m]) Int
ldz
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
rangePtr <- Char
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
vlPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
Ptr Float
vuPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
Ptr CInt
iuPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Float
abstolPtr <- Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stevx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
IO
(Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
z
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ifail
IO
(Int
-> (Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Float, Array (ZeroInt, ZeroInt) Float,
Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sycon ::
Char ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
Float ->
IO (Float, Int)
sycon :: Char
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Float
-> IO (Float, Int)
sycon Char
uplo Array (ZeroInt, ZeroInt) Float
a Array ZeroInt CInt
ipiv Float
anorm = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"sycon: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sycon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
syconv ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
IO (Array ZeroInt Float, Int)
syconv :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> IO (Array ZeroInt Float, Int)
syconv Char
uplo Char
way IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt CInt
ipiv = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"syconv: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
wayPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
way
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.syconv Ptr CChar
uploPtr Ptr CChar
wayPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
ePtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
syequb ::
Char ->
Array (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Float, Float, Int)
syequb :: Char
-> Array (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Float, Float, Int)
syequb Char
uplo Array (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int))
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
scondPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
amaxPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.syequb Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Float, Float, Int)
IO
(Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
-> IO
(Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
IO
(Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float
-> IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scondPtr
IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float -> IO (Int -> (Array ZeroInt Float, Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
IO (Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
syrfs ::
Char ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
syrfs :: Char
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
syrfs Char
uplo Array (ZeroInt, ZeroInt) Float
a Array (ZeroInt, ZeroInt) Float
af Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
x = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let (Int
afDim0,Int
afDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
af
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
x
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldaf :: Int
ldaf = Int
afDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldx :: Int
ldx = Int
xDim1
String -> Bool -> IO ()
Call.assert String
"syrfs: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
String -> Bool -> IO ()
Call.assert String
"syrfs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
String -> Bool -> IO ()
Call.assert String
"syrfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
afPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
af
Ptr CInt
ldafPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.syrfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sysv ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt CInt, Int)
sysv :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt CInt, Int)
sysv Char
uplo IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sysv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt) -> IO (Int -> (Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ipiv
IO (Int -> (Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sysvx ::
Char ->
Char ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray ZeroInt CInt ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)
sysvx :: Char
-> Char
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
sysvx Char
fact Char
uplo Array (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
af IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) Float
b Int
ldx Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let (Int
afDim0,Int
afDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
af
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldaf :: Int
ldaf = Int
afDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"sysvx: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
String -> Bool -> IO ()
Call.assert String
"sysvx: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray (ZeroInt, ZeroInt) Float
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
afPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
af
Ptr CInt
ldafPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
rcondPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sysvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
x
IO
(Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO
(Int
-> (Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) Float, Float, Array ZeroInt Float,
Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
syswapr ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IO ()
syswapr :: Char -> IOArray (ZeroInt, ZeroInt) Float -> Int -> Int -> IO ()
syswapr Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Int
i1 Int
i2 = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
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
$ do
Ptr CChar
uploPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
i1Ptr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i1
Ptr CInt
i2Ptr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i2
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.syswapr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
i1Ptr Ptr CInt
i2Ptr
sytd2 ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
sytd2 :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
sytd2 Char
uplo IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.sytd2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
tauPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sytf2 ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt CInt, Int)
sytf2 :: Char
-> IOArray (ZeroInt, ZeroInt) Float -> IO (Array ZeroInt CInt, Int)
sytf2 Char
uplo IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt) -> IO (Int -> (Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ipiv
IO (Int -> (Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sytrd ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
sytrd :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
sytrd Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytrd Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sytrf ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt CInt, Int)
sytrf :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt CInt, Int)
sytrf Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a. IO a -> ContT (Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt CInt -> Int -> (Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt) -> IO (Int -> (Array ZeroInt CInt, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ipiv
IO (Int -> (Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt CInt, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sytri ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
IO (Int)
sytri :: Char
-> IOArray (ZeroInt, ZeroInt) Float -> Array ZeroInt CInt -> IO Int
sytri Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt CInt
ipiv = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"sytri: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.sytri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sytri2 ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
Int ->
Int ->
IO (Int)
sytri2 :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> Int
-> IO Int
sytri2 Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt CInt
ipiv Int
nb Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"sytri2: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nbInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytri2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sytri2x ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
Int ->
IO (Int)
sytri2x :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Int
-> IO Int
sytri2x Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt CInt
ipiv Int
nb = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"sytri2x: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray (ZeroInt, ZeroInt) Float
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
nbInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nbInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
workPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
work
Ptr CInt
nbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytri2x Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
workPtr Ptr CInt
nbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sytrs ::
Char ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
sytrs :: Char
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
sytrs Char
uplo Array (ZeroInt, ZeroInt) Float
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) Float
b = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"sytrs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
sytrs2 ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
sytrs2 :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
sytrs2 Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) Float
b = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"sytrs2: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.sytrs2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tbcon ::
Char ->
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
IO (Float, Int)
tbcon :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> IO (Float, Int)
tbcon Char
norm Char
uplo Char
diag Int
kd Array (ZeroInt, ZeroInt) Float
ab = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tbcon Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
rcondPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tbrfs ::
Char ->
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
tbrfs :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
tbrfs Char
uplo Char
trans Char
diag Int
kd Array (ZeroInt, ZeroInt) Float
ab Array (ZeroInt, ZeroInt) Float
b Array (ZeroInt, ZeroInt) Float
x = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
x
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldx :: Int
ldx = Int
xDim1
String -> Bool -> IO ()
Call.assert String
"tbrfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tbrfs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tbtrs ::
Char ->
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
tbtrs :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
tbtrs Char
uplo Char
trans Char
diag Int
kd Array (ZeroInt, ZeroInt) Float
ab IOArray (ZeroInt, ZeroInt) Float
b = do
let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
ab
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
abPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tbtrs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr Float
abPtr Ptr CInt
ldabPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tfsm ::
Char ->
Char ->
Char ->
Char ->
Char ->
Int ->
Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO ()
tfsm :: Char
-> Char
-> Char
-> Char
-> Char
-> Int
-> Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO ()
tfsm Char
transr Char
side Char
uplo Char
trans Char
diag Int
m Float
alpha Array ZeroInt Float
a IOArray (ZeroInt, ZeroInt) Float
b = do
let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let _nt :: Int
_nt = Int
aDim0
let n :: Int
n = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
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
$ do
Ptr CChar
transrPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
sidePtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
uploPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
alphaPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
alpha
Ptr Float
aPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
a
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
IO () -> ContT () IO ()
forall a. IO a -> ContT () IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.tfsm Ptr CChar
transrPtr Ptr CChar
sidePtr Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
alphaPtr Ptr Float
aPtr Ptr Float
bPtr Ptr CInt
ldbPtr
tftri ::
Char ->
Char ->
Char ->
Int ->
IOArray ZeroInt Float ->
IO (Int)
tftri :: Char -> Char -> Char -> Int -> IOArray ZeroInt Float -> IO Int
tftri Char
transr Char
uplo Char
diag Int
n IOArray ZeroInt Float
a = do
let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
a
let _nt :: Int
_nt = Int
aDim0
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transrPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
a
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.tftri Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tfttp ::
Char ->
Char ->
Int ->
Array ZeroInt Float ->
IO (Array ZeroInt Float, Int)
tfttp :: Char
-> Char
-> Int
-> Array ZeroInt Float
-> IO (Array ZeroInt Float, Int)
tfttp Char
transr Char
uplo Int
n Array ZeroInt Float
arf = do
let arfDim0 :: Int
arfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
arf
String -> Bool -> IO ()
Call.assert String
"tfttp: n*(n+1)`div`2 == arfDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
arfDim0)
IOArray ZeroInt Float
ap <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2)
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transrPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
arfPtr <- Array ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
arf
Ptr Float
apPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.tfttp Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
arfPtr Ptr Float
apPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ap
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tfttr ::
Char ->
Char ->
Int ->
Array ZeroInt Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Int)
tfttr :: Char
-> Char
-> Int
-> Array ZeroInt Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
tfttr Char
transr Char
uplo Int
n Array ZeroInt Float
arf Int
lda = do
let arfDim0 :: Int
arfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
arf
String -> Bool -> IO ()
Call.assert String
"tfttr: n*(n+1)`div`2 == arfDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
arfDim0)
IOArray (ZeroInt, ZeroInt) Float
a <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
lda
ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transrPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
arfPtr <- Array ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
arf
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tfttr Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
arfPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
a
IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tgevc ::
Char ->
Char ->
Array ZeroInt Bool ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int, Int)
tgevc :: Char
-> Char
-> Array ZeroInt Bool
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Int, Int)
tgevc Char
side Char
howmny Array ZeroInt Bool
select Array (ZeroInt, ZeroInt) Float
s Array (ZeroInt, ZeroInt) Float
p IOArray (ZeroInt, ZeroInt) Float
vl IOArray (ZeroInt, ZeroInt) Float
vr = do
let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Bool -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Bool
select
let (Int
sDim0,Int
sDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
s
let (Int
pDim0,Int
pDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
p
let (Int
vlDim0,Int
vlDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
vl
let (Int
vrDim0,Int
vrDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
vr
let n :: Int
n = Int
selectDim0
let lds :: Int
lds = Int
sDim1
let ldp :: Int
ldp = Int
pDim1
let mm :: Int
mm = Int
vlDim0
let ldvl :: Int
ldvl = Int
vlDim1
let ldvr :: Int
ldvr = Int
vrDim1
String -> Bool -> IO ()
Call.assert String
"tgevc: n == sDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
String -> Bool -> IO ()
Call.assert String
"tgevc: n == pDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
pDim0)
String -> Bool -> IO ()
Call.assert String
"tgevc: mm == vrDim0" (Int
mm Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vrDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
6Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int) IO (Int, Int) -> IO (Int, Int))
-> ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
howmnyPtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
howmny
Ptr Bool
selectPtr <- Array ZeroInt Bool -> FortranIO (Int, Int) (Ptr Bool)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Bool
select
Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
sPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
s
Ptr CInt
ldsPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lds
Ptr Float
pPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
p
Ptr CInt
ldpPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldp
Ptr Float
vlPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vl
Ptr CInt
ldvlPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr Float
vrPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vr
Ptr CInt
ldvrPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr CInt
mmPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mm
Ptr CInt
mPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Int, Int) IO ()
forall a. IO a -> ContT (Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int) IO ())
-> IO () -> ContT (Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.tgevc Ptr CChar
sidePtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr Float
sPtr Ptr CInt
ldsPtr Ptr Float
pPtr Ptr CInt
ldpPtr Ptr Float
vlPtr Ptr CInt
ldvlPtr Ptr Float
vrPtr Ptr CInt
ldvrPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
forall a. IO a -> ContT (Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int) -> ContT (Int, Int) IO (Int, Int))
-> IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ (Int -> Int -> (Int, Int)) -> IO (Int -> Int -> (Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Int -> Int -> (Int, Int)) -> IO Int -> IO (Int -> (Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO (Int -> (Int, Int)) -> IO Int -> IO (Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tgex2 ::
Bool ->
Bool ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
Int ->
IO (Int)
tgex2 :: Bool
-> Bool
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> Int
-> IO Int
tgex2 Bool
wantq Bool
wantz IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
q IOArray (ZeroInt, ZeroInt) Float
z Int
j1 Int
n1 Int
n2 Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
let ldq :: Int
ldq = Int
qDim1
let ldz :: Int
ldz = Int
zDim1
String -> Bool -> IO ()
Call.assert String
"tgex2: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
String -> Bool -> IO ()
Call.assert String
"tgex2: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
String -> Bool -> IO ()
Call.assert String
"tgex2: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wantqPtr <- Bool -> FortranIO Int (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantq
Ptr Bool
wantzPtr <- Bool -> FortranIO Int (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
j1Ptr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
j1
Ptr CInt
n1Ptr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n1
Ptr CInt
n2Ptr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n2
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgex2 Ptr Bool
wantqPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr CInt
j1Ptr Ptr CInt
n1Ptr Ptr CInt
n2Ptr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tgexc ::
Bool ->
Bool ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
Int ->
IO (Int, Int, Int)
tgexc :: Bool
-> Bool
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> Int
-> IO (Int, Int, Int)
tgexc Bool
wantq Bool
wantz IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
q IOArray (ZeroInt, ZeroInt) Float
z Int
ifst Int
ilst Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
let ldq :: Int
ldq = Int
qDim1
let ldz :: Int
ldz = Int
zDim1
String -> Bool -> IO ()
Call.assert String
"tgexc: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
String -> Bool -> IO ()
Call.assert String
"tgexc: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
String -> Bool -> IO ()
Call.assert String
"tgexc: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT (Int, Int, Int) IO (Int, Int, Int) -> IO (Int, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int, Int) IO (Int, Int, Int) -> IO (Int, Int, Int))
-> ContT (Int, Int, Int) IO (Int, Int, Int) -> IO (Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wantqPtr <- Bool -> FortranIO (Int, Int, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantq
Ptr Bool
wantzPtr <- Bool -> FortranIO (Int, Int, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
nPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
ifstPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ifst
Ptr CInt
ilstPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilst
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Int, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Int, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Int, Int, Int) IO ()
forall a. IO a -> ContT (Int, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int, Int) IO ())
-> IO () -> ContT (Int, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgexc Ptr Bool
wantqPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr CInt
ifstPtr Ptr CInt
ilstPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Int, Int, Int) -> ContT (Int, Int, Int) IO (Int, Int, Int)
forall a. IO a -> ContT (Int, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int, Int) -> ContT (Int, Int, Int) IO (Int, Int, Int))
-> IO (Int, Int, Int) -> ContT (Int, Int, Int) IO (Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Int -> Int -> Int -> (Int, Int, Int))
-> IO (Int -> Int -> Int -> (Int, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO (Int -> Int -> Int -> (Int, Int, Int))
-> IO Int -> IO (Int -> Int -> (Int, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ifstPtr)
IO (Int -> Int -> (Int, Int, Int))
-> IO Int -> IO (Int -> (Int, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ilstPtr)
IO (Int -> (Int, Int, Int)) -> IO Int -> IO (Int, Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tgsen ::
Int ->
Bool ->
Bool ->
Array ZeroInt Bool ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Array ZeroInt Float, Int)
tgsen :: Int
-> Bool
-> Bool
-> Array ZeroInt Bool
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
tgsen Int
ijob Bool
wantq Bool
wantz Array ZeroInt Bool
select IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
q IOArray (ZeroInt, ZeroInt) Float
z Int
lwork Int
liwork = do
let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Bool -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Bool
select
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
z
let n :: Int
n = Int
selectDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
let ldq :: Int
ldq = Int
qDim1
let ldz :: Int
ldz = Int
zDim1
String -> Bool -> IO ()
Call.assert String
"tgsen: n == aDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
String -> Bool -> IO ()
Call.assert String
"tgsen: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
String -> Bool -> IO ()
Call.assert String
"tgsen: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
String -> Bool -> IO ()
Call.assert String
"tgsen: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
IOArray ZeroInt Float
alphar <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
alphai <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
beta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
dif <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
ijobPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
Ptr Bool
wantqPtr <- Bool
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantq
Ptr Bool
wantzPtr <- Bool
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr Bool
selectPtr <- Array ZeroInt Bool
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr Bool)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Bool
select
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
alpharPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alphar
Ptr Float
alphaiPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alphai
Ptr Float
betaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
beta
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
zPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
mPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
plPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
prPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
difPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dif
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Bool
-> Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgsen Ptr CInt
ijobPtr Ptr Bool
wantqPtr Ptr Bool
wantzPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
alpharPtr Ptr Float
alphaiPtr Ptr Float
betaPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
zPtr Ptr CInt
ldzPtr Ptr CInt
mPtr Ptr Float
plPtr Ptr Float
prPtr Ptr Float
difPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alphar
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> Float
-> Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alphai
IO
(Array ZeroInt Float
-> Int
-> Float
-> Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> Float
-> Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
beta
IO
(Int
-> Float
-> Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Float
-> Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Float
-> Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
(Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
plPtr
IO
(Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
prPtr
IO
(Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
dif
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
Int, Float, Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tgsja ::
Char ->
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Float ->
Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
tgsja :: Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
tgsja Char
jobu Char
jobv Char
jobq Int
k Int
l IOArray (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b Float
tola Float
tolb IOArray (ZeroInt, ZeroInt) Float
u IOArray (ZeroInt, ZeroInt) Float
v IOArray (ZeroInt, ZeroInt) Float
q = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let (Int
uDim0,Int
uDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
u
let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
v
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
let m :: Int
m = Int
uDim0
let ldu :: Int
ldu = Int
uDim1
let p :: Int
p = Int
vDim0
let ldv :: Int
ldv = Int
vDim1
let ldq :: Int
ldq = Int
qDim1
String -> Bool -> IO ()
Call.assert String
"tgsja: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
String -> Bool -> IO ()
Call.assert String
"tgsja: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
IOArray ZeroInt Float
alpha <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
beta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobuPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu
Ptr CChar
jobvPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv
Ptr CChar
jobqPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobq
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
pPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr CInt
lPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
l
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
tolaPtr <- Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tola
Ptr Float
tolbPtr <- Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tolb
Ptr Float
alphaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alpha
Ptr Float
betaPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
beta
Ptr Float
uPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr Float
vPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
v
Ptr CInt
ldvPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
ncyclePtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgsja Ptr CChar
jobuPtr Ptr CChar
jobvPtr Ptr CChar
jobqPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
lPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
tolaPtr Ptr Float
tolbPtr Ptr Float
alphaPtr Ptr Float
betaPtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr Float
vPtr Ptr CInt
ldvPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
workPtr Ptr CInt
ncyclePtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a.
IO a
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alpha
IO
(Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
beta
IO
(Int
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO Int
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ncyclePtr)
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tgsna ::
Char ->
Char ->
Array ZeroInt Bool ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
tgsna :: Char
-> Char
-> Array ZeroInt Bool
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
tgsna Char
job Char
howmny Array ZeroInt Bool
select Array (ZeroInt, ZeroInt) Float
a Array (ZeroInt, ZeroInt) Float
b Array (ZeroInt, ZeroInt) Float
vl Array (ZeroInt, ZeroInt) Float
vr Int
mm Int
lwork = do
let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Bool -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Bool
select
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
vlDim0,Int
vlDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
vl
let (Int
vrDim0,Int
vrDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
vr
let n :: Int
n = Int
selectDim0
let lda :: Int
lda = Int
aDim1
let ldb :: Int
ldb = Int
bDim1
let m :: Int
m = Int
vlDim0
let ldvl :: Int
ldvl = Int
vlDim1
let ldvr :: Int
ldvr = Int
vrDim1
String -> Bool -> IO ()
Call.assert String
"tgsna: n == aDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
String -> Bool -> IO ()
Call.assert String
"tgsna: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
String -> Bool -> IO ()
Call.assert String
"tgsna: m == vrDim0" (Int
m Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vrDim0)
IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
IOArray ZeroInt Float
dif <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6)
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CChar
howmnyPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
howmny
Ptr Bool
selectPtr <- Array ZeroInt Bool
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Bool)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Bool
select
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
vlPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
vl
Ptr CInt
ldvlPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr Float
vrPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
vr
Ptr CInt
ldvrPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
difPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dif
Ptr CInt
mmPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mm
Ptr CInt
mPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgsna Ptr CChar
jobPtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
vlPtr Ptr CInt
ldvlPtr Ptr Float
vrPtr Ptr CInt
ldvrPtr Ptr Float
sPtr Ptr Float
difPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a.
IO a
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
IO
(Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
dif
IO
(Int
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO Int
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tgsy2 ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Float ->
Float ->
IO (Float, Float, Float, Int, Int)
tgsy2 :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Float
-> Float
-> IO (Float, Float, Float, Int, Int)
tgsy2 Char
trans Int
ijob Array (ZeroInt, ZeroInt) Float
a Array (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
c Array (ZeroInt, ZeroInt) Float
d Array (ZeroInt, ZeroInt) Float
e IOArray (ZeroInt, ZeroInt) Float
f Float
rdsum Float
rdscal = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let (Int
dDim0,Int
dDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
d
let (Int
eDim0,Int
eDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
e
let (Int
fDim0,Int
fDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
f
let m :: Int
m = Int
aDim0
let lda :: Int
lda = Int
aDim1
let n :: Int
n = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldc :: Int
ldc = Int
cDim1
let ldd :: Int
ldd = Int
dDim1
let lde :: Int
lde = Int
eDim1
let ldf :: Int
ldf = Int
fDim1
String -> Bool -> IO ()
Call.assert String
"tgsy2: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
String -> Bool -> IO ()
Call.assert String
"tgsy2: m == dDim0" (Int
m Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
String -> Bool -> IO ()
Call.assert String
"tgsy2: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"tgsy2: n == fDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
fDim0)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2)
ContT
(Float, Float, Float, Int, Int) IO (Float, Float, Float, Int, Int)
-> IO (Float, Float, Float, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Float, Float, Float, Int, Int) IO (Float, Float, Float, Int, Int)
-> IO (Float, Float, Float, Int, Int))
-> ContT
(Float, Float, Float, Int, Int) IO (Float, Float, Float, Int, Int)
-> IO (Float, Float, Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char -> FortranIO (Float, Float, Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
ijobPtr <- Int -> FortranIO (Float, Float, Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
Ptr CInt
mPtr <- Int -> FortranIO (Float, Float, Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Float, Float, Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Float, Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Float, Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Float, Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Float, Float, Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO (Float, Float, Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
dPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Float, Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
d
Ptr CInt
lddPtr <- Int -> FortranIO (Float, Float, Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldd
Ptr Float
ePtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Float, Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
e
Ptr CInt
ldePtr <- Int -> FortranIO (Float, Float, Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lde
Ptr Float
fPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
f
Ptr CInt
ldfPtr <- Int -> FortranIO (Float, Float, Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldf
Ptr Float
scalePtr <- FortranIO (Float, Float, Float, Int, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
rdsumPtr <- Float -> FortranIO (Float, Float, Float, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rdsum
Ptr Float
rdscalPtr <- Float -> FortranIO (Float, Float, Float, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rdscal
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Float, Float, Float, Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
pqPtr <- FortranIO (Float, Float, Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Float, Float, Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float, Float, Int, Int) IO ()
forall a. IO a -> ContT (Float, Float, Float, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Float, Int, Int) IO ())
-> IO () -> ContT (Float, Float, Float, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgsy2 Ptr CChar
transPtr Ptr CInt
ijobPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
dPtr Ptr CInt
lddPtr Ptr Float
ePtr Ptr CInt
ldePtr Ptr Float
fPtr Ptr CInt
ldfPtr Ptr Float
scalePtr Ptr Float
rdsumPtr Ptr Float
rdscalPtr Ptr CInt
iworkPtr Ptr CInt
pqPtr Ptr CInt
infoPtr
IO (Float, Float, Float, Int, Int)
-> ContT
(Float, Float, Float, Int, Int) IO (Float, Float, Float, Int, Int)
forall a. IO a -> ContT (Float, Float, Float, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Float, Int, Int)
-> ContT
(Float, Float, Float, Int, Int) IO (Float, Float, Float, Int, Int))
-> IO (Float, Float, Float, Int, Int)
-> ContT
(Float, Float, Float, Int, Int) IO (Float, Float, Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Float
-> Float -> Float -> Int -> Int -> (Float, Float, Float, Int, Int))
-> IO
(Float
-> Float -> Float -> Int -> Int -> (Float, Float, Float, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Float
-> Float -> Float -> Int -> Int -> (Float, Float, Float, Int, Int))
-> IO Float
-> IO
(Float -> Float -> Int -> Int -> (Float, Float, Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
IO
(Float -> Float -> Int -> Int -> (Float, Float, Float, Int, Int))
-> IO Float
-> IO (Float -> Int -> Int -> (Float, Float, Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rdsumPtr
IO (Float -> Int -> Int -> (Float, Float, Float, Int, Int))
-> IO Float -> IO (Int -> Int -> (Float, Float, Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rdscalPtr
IO (Int -> Int -> (Float, Float, Float, Int, Int))
-> IO Int -> IO (Int -> (Float, Float, Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
pqPtr)
IO (Int -> (Float, Float, Float, Int, Int))
-> IO Int -> IO (Float, Float, Float, Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tgsyl ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Float, Float, Int)
tgsyl :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Float, Float, Int)
tgsyl Char
trans Int
ijob Array (ZeroInt, ZeroInt) Float
a Array (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
c Array (ZeroInt, ZeroInt) Float
d Array (ZeroInt, ZeroInt) Float
e IOArray (ZeroInt, ZeroInt) Float
f Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let (Int
dDim0,Int
dDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
d
let (Int
eDim0,Int
eDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
e
let (Int
fDim0,Int
fDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
f
let m :: Int
m = Int
aDim0
let lda :: Int
lda = Int
aDim1
let n :: Int
n = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldc :: Int
ldc = Int
cDim1
let ldd :: Int
ldd = Int
dDim1
let lde :: Int
lde = Int
eDim1
let ldf :: Int
ldf = Int
fDim1
String -> Bool -> IO ()
Call.assert String
"tgsyl: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
String -> Bool -> IO ()
Call.assert String
"tgsyl: m == dDim0" (Int
m Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
String -> Bool -> IO ()
Call.assert String
"tgsyl: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
String -> Bool -> IO ()
Call.assert String
"tgsyl: n == fDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
fDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6)
ContT (Float, Float, Int) IO (Float, Float, Int)
-> IO (Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float, Int) IO (Float, Float, Int)
-> IO (Float, Float, Int))
-> ContT (Float, Float, Int) IO (Float, Float, Int)
-> IO (Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char -> FortranIO (Float, Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
ijobPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
Ptr CInt
mPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
dPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
d
Ptr CInt
lddPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldd
Ptr Float
ePtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
e
Ptr CInt
ldePtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lde
Ptr Float
fPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
f
Ptr CInt
ldfPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldf
Ptr Float
scalePtr <- FortranIO (Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
difPtr <- FortranIO (Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Float, Int) IO ()
forall a. IO a -> ContT (Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Int) IO ())
-> IO () -> ContT (Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgsyl Ptr CChar
transPtr Ptr CInt
ijobPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
dPtr Ptr CInt
lddPtr Ptr Float
ePtr Ptr CInt
ldePtr Ptr Float
fPtr Ptr CInt
ldfPtr Ptr Float
scalePtr Ptr Float
difPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Float, Float, Int)
-> ContT (Float, Float, Int) IO (Float, Float, Int)
forall a. IO a -> ContT (Float, Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Int)
-> ContT (Float, Float, Int) IO (Float, Float, Int))
-> IO (Float, Float, Int)
-> ContT (Float, Float, Int) IO (Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> Int -> (Float, Float, Int))
-> IO (Float -> Float -> Int -> (Float, Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO (Float -> Float -> Int -> (Float, Float, Int))
-> IO Float -> IO (Float -> Int -> (Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
IO (Float -> Int -> (Float, Float, Int))
-> IO Float -> IO (Int -> (Float, Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
difPtr
IO (Int -> (Float, Float, Int)) -> IO Int -> IO (Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tpcon ::
Char ->
Char ->
Char ->
Int ->
Array ZeroInt Float ->
IO (Float, Int)
tpcon :: Char
-> Char -> Char -> Int -> Array ZeroInt Float -> IO (Float, Int)
tpcon Char
norm Char
uplo Char
diag Int
n Array ZeroInt Float
ap = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"tpcon: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tpcon Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
rcondPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tprfs ::
Char ->
Char ->
Char ->
Int ->
Array ZeroInt Float ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
tprfs :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
tprfs Char
uplo Char
trans Char
diag Int
n Array ZeroInt Float
ap Array (ZeroInt, ZeroInt) Float
b Array (ZeroInt, ZeroInt) Float
x = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
x
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldx :: Int
ldx = Int
xDim1
String -> Bool -> IO ()
Call.assert String
"tprfs: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
String -> Bool -> IO ()
Call.assert String
"tprfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
apPtr <- Array ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tprfs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
apPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tptri ::
Char ->
Char ->
Int ->
IOArray ZeroInt Float ->
IO (Int)
tptri :: Char -> Char -> Int -> IOArray ZeroInt Float -> IO Int
tptri Char
uplo Char
diag Int
n IOArray ZeroInt Float
ap = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"tptri: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar -> Ptr CInt -> Ptr Float -> Ptr CInt -> IO ()
FFI.tptri Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tptrs ::
Char ->
Char ->
Char ->
Int ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
tptrs :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
tptrs Char
uplo Char
trans Char
diag Int
n Array ZeroInt Float
ap IOArray (ZeroInt, ZeroInt) Float
b = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"tptrs: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
apPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tptrs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
apPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tpttf ::
Char ->
Char ->
Int ->
Array ZeroInt Float ->
IO (Array ZeroInt Float, Int)
tpttf :: Char
-> Char
-> Int
-> Array ZeroInt Float
-> IO (Array ZeroInt Float, Int)
tpttf Char
transr Char
uplo Int
n Array ZeroInt Float
ap = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"tpttf: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray ZeroInt Float
arf <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2)
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transrPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- Array ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
arfPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
arf
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.tpttf Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
arfPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
arf
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tpttr ::
Char ->
Int ->
Array ZeroInt Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Int)
tpttr :: Char
-> Int
-> Array ZeroInt Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
tpttr Char
uplo Int
n Array ZeroInt Float
ap Int
lda = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
String -> Bool -> IO ()
Call.assert String
"tpttr: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
IOArray (ZeroInt, ZeroInt) Float
a <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
lda
ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- Array ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tpttr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
a
IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
trcon ::
Char ->
Char ->
Char ->
Array (ZeroInt,ZeroInt) Float ->
IO (Float, Int)
trcon :: Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) Float
-> IO (Float, Int)
trcon Char
norm Char
uplo Char
diag Array (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trcon Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
rcondPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
trevc ::
Char ->
Char ->
IOArray ZeroInt Bool ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int, Int)
trevc :: Char
-> Char
-> IOArray ZeroInt Bool
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Int, Int)
trevc Char
side Char
howmny IOArray ZeroInt Bool
select Array (ZeroInt, ZeroInt) Float
t IOArray (ZeroInt, ZeroInt) Float
vl IOArray (ZeroInt, ZeroInt) Float
vr = do
let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Bool -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Bool
select
let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
t
let (Int
vlDim0,Int
vlDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
vl
let (Int
vrDim0,Int
vrDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
vr
let n :: Int
n = Int
selectDim0
let ldt :: Int
ldt = Int
tDim1
let mm :: Int
mm = Int
vlDim0
let ldvl :: Int
ldvl = Int
vlDim1
let ldvr :: Int
ldvr = Int
vrDim1
String -> Bool -> IO ()
Call.assert String
"trevc: n == tDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tDim0)
String -> Bool -> IO ()
Call.assert String
"trevc: mm == vrDim0" (Int
mm Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vrDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int) IO (Int, Int) -> IO (Int, Int))
-> ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
howmnyPtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
howmny
Ptr Bool
selectPtr <- IOArray ZeroInt Bool -> FortranIO (Int, Int) (Ptr Bool)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Bool
select
Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
tPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
t
Ptr CInt
ldtPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr Float
vlPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vl
Ptr CInt
ldvlPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr Float
vrPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
vr
Ptr CInt
ldvrPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr CInt
mmPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mm
Ptr CInt
mPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Int, Int) IO ()
forall a. IO a -> ContT (Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int) IO ())
-> IO () -> ContT (Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.trevc Ptr CChar
sidePtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr Float
tPtr Ptr CInt
ldtPtr Ptr Float
vlPtr Ptr CInt
ldvlPtr Ptr Float
vrPtr Ptr CInt
ldvrPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
forall a. IO a -> ContT (Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int) -> ContT (Int, Int) IO (Int, Int))
-> IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ (Int -> Int -> (Int, Int)) -> IO (Int -> Int -> (Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Int -> Int -> (Int, Int)) -> IO Int -> IO (Int -> (Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO (Int -> (Int, Int)) -> IO Int -> IO (Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
trexc ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IO (Int, Int, Int)
trexc :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IO (Int, Int, Int)
trexc Char
compq IOArray (ZeroInt, ZeroInt) Float
t IOArray (ZeroInt, ZeroInt) Float
q Int
ifst Int
ilst = do
let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
t
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let n :: Int
n = Int
tDim0
let ldt :: Int
ldt = Int
tDim1
let ldq :: Int
ldq = Int
qDim1
String -> Bool -> IO ()
Call.assert String
"trexc: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Int, Int, Int) IO (Int, Int, Int) -> IO (Int, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int, Int) IO (Int, Int, Int) -> IO (Int, Int, Int))
-> ContT (Int, Int, Int) IO (Int, Int, Int) -> IO (Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
compqPtr <- Char -> FortranIO (Int, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compq
Ptr CInt
nPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
tPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
t
Ptr CInt
ldtPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Int, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr CInt
ifstPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ifst
Ptr CInt
ilstPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilst
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO (Int, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Int, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Int, Int, Int) IO ()
forall a. IO a -> ContT (Int, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int, Int) IO ())
-> IO () -> ContT (Int, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.trexc Ptr CChar
compqPtr Ptr CInt
nPtr Ptr Float
tPtr Ptr CInt
ldtPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr CInt
ifstPtr Ptr CInt
ilstPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Int, Int, Int) -> ContT (Int, Int, Int) IO (Int, Int, Int)
forall a. IO a -> ContT (Int, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int, Int) -> ContT (Int, Int, Int) IO (Int, Int, Int))
-> IO (Int, Int, Int) -> ContT (Int, Int, Int) IO (Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Int -> Int -> Int -> (Int, Int, Int))
-> IO (Int -> Int -> Int -> (Int, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO (Int -> Int -> Int -> (Int, Int, Int))
-> IO Int -> IO (Int -> Int -> (Int, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ifstPtr)
IO (Int -> Int -> (Int, Int, Int))
-> IO Int -> IO (Int -> (Int, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ilstPtr)
IO (Int -> (Int, Int, Int)) -> IO Int -> IO (Int, Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
trrfs ::
Char ->
Char ->
Char ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
trrfs :: Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
trrfs Char
uplo Char
trans Char
diag Array (ZeroInt, ZeroInt) Float
a Array (ZeroInt, ZeroInt) Float
b Array (ZeroInt, ZeroInt) Float
x = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
x
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldx :: Int
ldx = Int
xDim1
String -> Bool -> IO ()
Call.assert String
"trrfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
xPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trrfs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a.
IO a -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
IO
(Array ZeroInt Float
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
trsen ::
Char ->
Char ->
Array ZeroInt Bool ->
IOArray (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
trsen :: Char
-> Char
-> Array ZeroInt Bool
-> IOArray (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
trsen Char
job Char
compq Array ZeroInt Bool
select IOArray (ZeroInt, ZeroInt) Float
t IOArray (ZeroInt, ZeroInt) Float
q Int
lwork Int
liwork = do
let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Bool -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Bool
select
let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
t
let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
q
let n :: Int
n = Int
selectDim0
let ldt :: Int
ldt = Int
tDim1
let ldq :: Int
ldq = Int
qDim1
String -> Bool -> IO ()
Call.assert String
"trsen: n == tDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tDim0)
String -> Bool -> IO ()
Call.assert String
"trsen: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
IOArray ZeroInt Float
wr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
wi <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CChar
compqPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compq
Ptr Bool
selectPtr <- Array ZeroInt Bool
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Bool)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Bool
select
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
tPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
t
Ptr CInt
ldtPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
wrPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wr
Ptr Float
wiPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wi
Ptr CInt
mPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
sPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
sepPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
liworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trsen Ptr CChar
jobPtr Ptr CChar
compqPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr Float
tPtr Ptr CInt
ldtPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
wrPtr Ptr Float
wiPtr Ptr CInt
mPtr Ptr Float
sPtr Ptr Float
sepPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int))
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float,
Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wr
IO
(Array ZeroInt Float
-> Int
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float,
Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
wi
IO
(Int
-> Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float,
Int))
-> IO Int
-> IO
(Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO
(Float
-> Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float,
Int))
-> IO Float
-> IO
(Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
sPtr
IO
(Float
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float,
Int))
-> IO Float
-> IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float,
Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
sepPtr
IO
(Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float,
Int))
-> IO Int
-> IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Float, Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
trsna ::
Char ->
Char ->
Array ZeroInt Bool ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
Int ->
IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
trsna :: Char
-> Char
-> Array ZeroInt Bool
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
trsna Char
job Char
howmny Array ZeroInt Bool
select Array (ZeroInt, ZeroInt) Float
t Array (ZeroInt, ZeroInt) Float
vl Array (ZeroInt, ZeroInt) Float
vr Int
mm Int
ldwork = do
let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Bool -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Bool
select
let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
t
let (Int
vlDim0,Int
vlDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
vl
let (Int
vrDim0,Int
vrDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
vr
let n :: Int
n = Int
selectDim0
let ldt :: Int
ldt = Int
tDim1
let m :: Int
m = Int
vlDim0
let ldvl :: Int
ldvl = Int
vlDim1
let ldvr :: Int
ldvr = Int
vrDim1
String -> Bool -> IO ()
Call.assert String
"trsna: n == tDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tDim0)
String -> Bool -> IO ()
Call.assert String
"trsna: m == vrDim0" (Int
m Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vrDim0)
IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
IOArray ZeroInt Float
sep <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
IOArray (ZeroInt, ZeroInt) Float
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) Int
ldwork
IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1))
ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CChar
howmnyPtr <- Char
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
howmny
Ptr Bool
selectPtr <- Array ZeroInt Bool
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Bool)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Bool
select
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
tPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
t
Ptr CInt
ldtPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr Float
vlPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
vl
Ptr CInt
ldvlPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr Float
vrPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
vr
Ptr CInt
ldvrPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
Ptr Float
sepPtr <- IOArray ZeroInt Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
sep
Ptr CInt
mmPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mm
Ptr CInt
mPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Float
workPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
work
Ptr CInt
ldworkPtr <- Int
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trsna Ptr CChar
jobPtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr Float
tPtr Ptr CInt
ldtPtr Ptr Float
vlPtr Ptr CInt
ldvlPtr Ptr Float
vrPtr Ptr CInt
ldvrPtr Ptr Float
sPtr Ptr Float
sepPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr Float
workPtr Ptr CInt
ldworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a.
IO a
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
IO
(Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO
(Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
IO
(Array ZeroInt Float
-> Int
-> Int
-> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO
(Int
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
sep
IO
(Int
-> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO Int
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
trsyl ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Float, Int)
trsyl :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO (Float, Int)
trsyl Char
trana Char
tranb Int
isgn Array (ZeroInt, ZeroInt) Float
a Array (ZeroInt, ZeroInt) Float
b IOArray (ZeroInt, ZeroInt) Float
c = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let m :: Int
m = Int
aDim0
let lda :: Int
lda = Int
aDim1
let n :: Int
n = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let ldc :: Int
ldc = Int
cDim1
String -> Bool -> IO ()
Call.assert String
"trsyl: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
tranaPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trana
Ptr CChar
tranbPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
tranb
Ptr CInt
isgnPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
isgn
Ptr CInt
mPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
scalePtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Float, Int) IO ()
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.trsyl Ptr CChar
tranaPtr Ptr CChar
tranbPtr Ptr CInt
isgnPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
scalePtr Ptr CInt
infoPtr
IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a. IO a -> ContT (Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
trti2 ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
trti2 :: Char -> Char -> IOArray (ZeroInt, ZeroInt) Float -> IO Int
trti2 Char
uplo Char
diag IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trti2 Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
trtri ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
trtri :: Char -> Char -> IOArray (ZeroInt, ZeroInt) Float -> IO Int
trtri Char
uplo Char
diag IOArray (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trtri Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
trtrs ::
Char ->
Char ->
Char ->
Array (ZeroInt,ZeroInt) Float ->
IOArray (ZeroInt,ZeroInt) Float ->
IO (Int)
trtrs :: Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) Float
-> IOArray (ZeroInt, ZeroInt) Float
-> IO Int
trtrs Char
uplo Char
trans Char
diag Array (ZeroInt, ZeroInt) Float
a IOArray (ZeroInt, ZeroInt) Float
b = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
b
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
bPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trtrs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
trttf ::
Char ->
Char ->
Array (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Int)
trttf :: Char
-> Char
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Int)
trttf Char
transr Char
uplo Array (ZeroInt, ZeroInt) Float
a Int
nt = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
arf <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nt
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transrPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
arfPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
arf
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.trttf Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
arfPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
arf
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
trttp ::
Char ->
Array (ZeroInt,ZeroInt) Float ->
IO (Array ZeroInt Float, Int)
trttp :: Char
-> Array (ZeroInt, ZeroInt) Float -> IO (Array ZeroInt Float, Int)
trttp Char
uplo Array (ZeroInt, ZeroInt) Float
a = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
ap <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2)
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
apPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ap
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.trttp Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
apPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ap
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
tzrzf ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Array ZeroInt Float, Int)
tzrzf :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt Float, Int)
tzrzf Int
m IOArray (ZeroInt, ZeroInt) Float
a Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Float
tau <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tzrzf Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a. IO a -> ContT (Array ZeroInt Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
tau
IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
org2l ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IO (Int)
org2l :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IO Int
org2l Int
m IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.org2l Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
org2r ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IO (Int)
org2r :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IO Int
org2r Int
m IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.org2r Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
orgbr ::
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Int ->
IO (Int)
orgbr :: Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Int
-> IO Int
orgbr Char
vect Int
m Int
k IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let _tauSize :: Int
_tauSize = Int
tauDim0
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
vectPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
vect
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orgbr Ptr CChar
vectPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
orghr ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Int ->
IO (Int)
orghr :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Int
-> IO Int
orghr Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"orghr: n-1 == tauDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orghr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
orgl2 ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IO (Int)
orgl2 :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IO Int
orgl2 Int
m IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.orgl2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
orglq ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Int ->
IO (Int)
orglq :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Int
-> IO Int
orglq Int
m IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orglq Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
orgql ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Int ->
IO (Int)
orgql :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Int
-> IO Int
orgql Int
m IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orgql Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
orgqr ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Int ->
IO (Int)
orgqr :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Int
-> IO Int
orgqr Int
m IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orgqr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
orgr2 ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IO (Int)
orgr2 :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IO Int
orgr2 Int
m IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.orgr2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
orgrq ::
Int ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Int ->
IO (Int)
orgrq :: Int
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Int
-> IO Int
orgrq Int
m IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orgrq Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
orgtr ::
Char ->
IOArray (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
Int ->
IO (Int)
orgtr :: Char
-> IOArray (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Int
-> IO Int
orgtr Char
uplo IOArray (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"orgtr: n-1 == tauDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orgtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
orm2l ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
orm2l :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
orm2l Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
workSize = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let k :: Int
k = Int
aDim0
let lda :: Int
lda = Int
aDim1
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
String -> Bool -> IO ()
Call.assert String
"orm2l: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.orm2l Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
orm2r ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
orm2r :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
orm2r Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
workSize = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let k :: Int
k = Int
aDim0
let lda :: Int
lda = Int
aDim1
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
String -> Bool -> IO ()
Call.assert String
"orm2r: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.orm2r Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ormbr ::
Char ->
Char ->
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
ormbr :: Char
-> Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
ormbr Char
vect Char
side Char
trans Int
m Int
k Array (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let _aSize :: Int
_aSize = Int
aDim0
let lda :: Int
lda = Int
aDim1
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
String -> Int -> IO ()
Call.ignore String
"ormbr: minimum[nq,k] == tauDim0" Int
tauDim0
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
vectPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
vect
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormbr Ptr CChar
vectPtr Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ormhr ::
Char ->
Char ->
Int ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
ormhr :: Char
-> Char
-> Int
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
ormhr Char
side Char
trans Int
m Int
ilo Int
ihi Array (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let _aSize :: Int
_aSize = Int
aDim0
let lda :: Int
lda = Int
aDim1
let _tauSize :: Int
_tauSize = Int
tauDim0
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormhr Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
orml2 ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
orml2 :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
orml2 Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
workSize = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let _aSize :: Int
_aSize = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.orml2 Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ormlq ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
ormlq :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
ormlq Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let _aSize :: Int
_aSize = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormlq Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ormql ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
ormql :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
ormql Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let k :: Int
k = Int
aDim0
let lda :: Int
lda = Int
aDim1
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
String -> Bool -> IO ()
Call.assert String
"ormql: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormql Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ormqr ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
ormqr :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
ormqr Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let k :: Int
k = Int
aDim0
let lda :: Int
lda = Int
aDim1
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
String -> Bool -> IO ()
Call.assert String
"ormqr: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormqr Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ormr2 ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
ormr2 :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
ormr2 Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
workSize = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let _aSize :: Int
_aSize = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ormr2 Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ormr3 ::
Char ->
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
ormr3 :: Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
ormr3 Char
side Char
trans Int
m Int
l Array (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
workSize = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let _aSize :: Int
_aSize = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr CInt
lPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
l
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ormr3 Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
lPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ormrq ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
ormrq :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
ormrq Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let _aSize :: Int
_aSize = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormrq Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ormrz ::
Char ->
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
ormrz :: Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
ormrz Char
side Char
trans Int
m Int
l Array (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let _aSize :: Int
_aSize = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr CInt
lPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
l
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormrz Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
lPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
ormtr ::
Char ->
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
ormtr :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
ormtr Char
side Char
uplo Char
trans Int
m Array (ZeroInt, ZeroInt) Float
a Array ZeroInt Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
lwork = do
let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let _aSize :: Int
_aSize = Int
aDim0
let lda :: Int
lda = Int
aDim1
let _tauSize :: Int
_tauSize = Int
tauDim0
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall a. Ord a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormtr Ptr CChar
sidePtr Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
opgtr ::
Char ->
Int ->
Array ZeroInt Float ->
Array ZeroInt Float ->
Int ->
IO (Array (ZeroInt,ZeroInt) Float, Int)
opgtr :: Char
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
opgtr Char
uplo Int
n Array ZeroInt Float
ap Array ZeroInt Float
tau Int
ldq = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
String -> Bool -> IO ()
Call.assert String
"opgtr: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
String -> Bool -> IO ()
Call.assert String
"opgtr: n-1 == tauDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
IOArray (ZeroInt, ZeroInt) Float
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- Array ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
tauPtr <- Array ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
qPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
q
Ptr CInt
ldqPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.opgtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
tauPtr Ptr Float
qPtr Ptr CInt
ldqPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a. IO a -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
(Array (ZeroInt, ZeroInt) Float, Int)
IO
(Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) Float
-> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
q
IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)
opmtr ::
Char ->
Char ->
Char ->
Int ->
Array ZeroInt Float ->
Array ZeroInt Float ->
IOArray (ZeroInt,ZeroInt) Float ->
Int ->
IO (Int)
opmtr :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) Float
-> Int
-> IO Int
opmtr Char
side Char
uplo Char
trans Int
m Array ZeroInt Float
ap Array ZeroInt Float
tau IOArray (ZeroInt, ZeroInt) Float
c Int
workSize = do
let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ap
let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
tau
let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Float
c
let _apSize :: Int
_apSize = Int
apDim0
let _tauSize :: Int
_tauSize = Int
tauDim0
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Float
apPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ap
Ptr Float
tauPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
tau
Ptr Float
cPtr <- IOArray (ZeroInt, ZeroInt) Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Int IO ()
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.opmtr Ptr CChar
sidePtr Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
apPtr Ptr Float
tauPtr Ptr Float
cPtr Ptr CInt
ldcPtr Ptr Float
workPtr Ptr CInt
infoPtr
IO Int -> ContT Int IO Int
forall a. IO a -> ContT Int IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> ContT Int IO Int) -> IO Int -> ContT Int IO Int
forall a b. (a -> b) -> a -> b
$ (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)