module Numeric.LAPACK.ComfortArray.ComplexDouble where
import qualified Numeric.LAPACK.FFI.ComplexDouble 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 Data.Complex (Complex)
import Foreign.Storable.Complex ()
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 Double ->
IOArray ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)
bbcsd :: Char
-> Char
-> Char
-> Char
-> Char
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
bbcsd Char
jobu1 Char
jobu2 Char
jobv1t Char
jobv2t Char
trans Int
m IOArray ZeroInt Double
theta IOArray ZeroInt Double
phi IOArray (ZeroInt, ZeroInt) (Complex Double)
u1 IOArray (ZeroInt, ZeroInt) (Complex Double)
u2 IOArray (ZeroInt, ZeroInt) (Complex Double)
v1t IOArray (ZeroInt, ZeroInt) (Complex Double)
v2t Int
lrwork = 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
b11d <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
IOArray ZeroInt Double
b11e <- Int -> IO (IOArray ZeroInt Double)
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 Double
b12d <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
IOArray ZeroInt Double
b12e <- Int -> IO (IOArray ZeroInt Double)
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 Double
b21d <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
IOArray ZeroInt Double
b21e <- Int -> IO (IOArray ZeroInt Double)
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 Double
b22d <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
IOArray ZeroInt Double
b22e <- Int -> IO (IOArray ZeroInt Double)
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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
lrwork])
ContT
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobu1Ptr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu1
Ptr CChar
jobu2Ptr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu2
Ptr CChar
jobv1tPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv1t
Ptr CChar
jobv2tPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv2t
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
pPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr CInt
qPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
q
Ptr Double
thetaPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
theta
Ptr Double
phiPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
phi
Ptr (Complex Double)
u1Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
u1
Ptr CInt
ldu1Ptr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu1
Ptr (Complex Double)
u2Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
u2
Ptr CInt
ldu2Ptr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu2
Ptr (Complex Double)
v1tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
v1t
Ptr CInt
ldv1tPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv1t
Ptr (Complex Double)
v2tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
v2t
Ptr CInt
ldv2tPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv2t
Ptr Double
b11dPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
b11d
Ptr Double
b11ePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
b11e
Ptr Double
b12dPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
b12d
Ptr Double
b12ePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
b12e
Ptr Double
b21dPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
b21d
Ptr Double
b21ePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
b21e
Ptr Double
b22dPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
b22d
Ptr Double
b22ePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
b22e
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
lrworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, 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 Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> 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 Double
thetaPtr Ptr Double
phiPtr Ptr (Complex Double)
u1Ptr Ptr CInt
ldu1Ptr Ptr (Complex Double)
u2Ptr Ptr CInt
ldu2Ptr Ptr (Complex Double)
v1tPtr Ptr CInt
ldv1tPtr Ptr (Complex Double)
v2tPtr Ptr CInt
ldv2tPtr Ptr Double
b11dPtr Ptr Double
b11ePtr Ptr Double
b12dPtr Ptr Double
b12ePtr Ptr Double
b21dPtr Ptr Double
b21ePtr Ptr Double
b22dPtr Ptr Double
b22ePtr Ptr Double
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
b11d
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
b11e
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
b12d
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
b12e
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
b21d
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
b21e
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
b22d
IO
(Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
b22e
IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt Double, Array 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)
bdsqr ::
Char ->
Int ->
IOArray ZeroInt Double ->
IOArray ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
bdsqr :: Char
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
bdsqr Char
uplo Int
nru IOArray ZeroInt Double
d IOArray ZeroInt Double
e IOArray (ZeroInt, ZeroInt) (Complex Double)
vt IOArray (ZeroInt, ZeroInt) (Complex Double)
u IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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 Double
dPtr <- IOArray ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
vtPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vt
Ptr CInt
ldvtPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
Ptr (Complex Double)
uPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
u
Ptr CInt
lduPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
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 Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.bdsqr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
ncvtPtr Ptr CInt
nruPtr Ptr CInt
nccPtr Ptr Double
dPtr Ptr Double
ePtr Ptr (Complex Double)
vtPtr Ptr CInt
ldvtPtr Ptr (Complex Double)
uPtr Ptr CInt
lduPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr Double
rworkPtr 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)
cgesv ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt CInt, Array (ZeroInt,ZeroInt) (Complex Double), Int, Int)
cgesv :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
cgesv Int
n IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
b
let _aSize :: Int
_aSize = 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, ZeroInt) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray (ZeroInt, ZeroInt) (Complex Double)
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
n
IOArray ZeroInt (Complex Float)
swork <- Int -> IO (IOArray ZeroInt (Complex 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
nrhs))
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
IO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
-> IO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
IO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
-> IO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int))
-> ContT
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
IO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
-> IO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, 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, ZeroInt) (Complex Double),
Int, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr (Complex Double)
workPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
work
Ptr (Complex Float)
sworkPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
(Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
swork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
iterPtr <- FortranIO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Float)
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.cgesv Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr (Complex Double)
workPtr Ptr (Complex Float)
sworkPtr Ptr Double
rworkPtr Ptr CInt
iterPtr Ptr CInt
infoPtr
IO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
-> ContT
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
IO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
forall a.
IO a
-> ContT
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
-> ContT
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
IO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int))
-> IO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
-> ContT
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
IO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int))
-> IO
(Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
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
ipiv
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> Int
-> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
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, ZeroInt) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO
(Int
-> Int
-> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int))
-> IO Int
-> IO
(Int
-> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
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
iterPtr)
IO
(Int
-> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
Int, Int))
-> IO Int
-> IO
(Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Double),
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)
cposv ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Int, Int)
cposv :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
cposv Char
uplo Int
n IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
b
let _aSize :: Int
_aSize = Int
aDim0
let lda :: Int
lda = Int
aDim1
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
IOArray (ZeroInt, ZeroInt) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray (ZeroInt, ZeroInt) (Complex Double)
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
n
IOArray ZeroInt (Complex Float)
swork <- Int -> IO (IOArray ZeroInt (Complex 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
nrhs))
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int, Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr (Complex Double)
workPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
work
Ptr (Complex Float)
sworkPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
(Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
swork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
iterPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int) IO ()
forall a.
IO a
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int) IO ())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Float)
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.cposv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr (Complex Double)
workPtr Ptr (Complex Float)
sworkPtr Ptr Double
rworkPtr Ptr CInt
iterPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
forall a.
IO a
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), 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, ZeroInt) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO
(Int
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int, Int))
-> IO Int
-> IO
(Int -> (Array (ZeroInt, ZeroInt) (Complex Double), 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
iterPtr)
IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int, Int))
-> IO Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), 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)
gbbrd ::
Char ->
Int ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)
gbbrd :: Char
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
gbbrd Char
vect Int
m Int
kl Int
ku IOArray (ZeroInt, ZeroInt) (Complex Double)
ab Int
ldq Int
ldpt IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
d <- Int -> IO (IOArray ZeroInt Double)
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 Double
e <- Int -> IO (IOArray ZeroInt Double)
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) (Complex Double)
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
m Int
ldq
IOArray (ZeroInt, ZeroInt) (Complex Double)
pt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldpt
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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])
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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 Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
vectPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
vect
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nccPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ncc
Ptr CInt
klPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr (Complex Double)
ptPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
pt
Ptr CInt
ldptPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldpt
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gbbrd Ptr CChar
vectPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nccPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
dPtr Ptr Double
ePtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr (Complex Double)
ptPtr Ptr CInt
ldptPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
d
IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
e
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
pt
IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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)
gbcon ::
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt CInt ->
Double ->
IO (Double, Int)
gbcon :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Double
-> IO (Double, Int)
gbcon Char
norm Int
kl Int
ku Array (ZeroInt, ZeroInt) (Complex Double)
ab Array ZeroInt CInt
ipiv Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Double, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Double
anormPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
anorm
Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gbcon Ptr CChar
normPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
gbequ ::
Int ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)
gbequ :: Int
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
gbequ Int
m Int
kl Int
ku Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Double
r <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Double
c <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
rPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
r
Ptr Double
cPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
c
Ptr Double
rowcndPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
colcndPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
amaxPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gbequ Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
rPtr Ptr Double
cPtr Ptr Double
rowcndPtr Ptr Double
colcndPtr Ptr Double
amaxPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
r
IO
(Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
c
IO
(Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Double
-> IO
(Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rowcndPtr
IO
(Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Double
-> IO
(Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
colcndPtr
IO
(Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Double
-> IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
amaxPtr
IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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)
gbequb ::
Int ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)
gbequb :: Int
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
gbequb Int
m Int
kl Int
ku Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Double
r <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Double
c <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
rPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
r
Ptr Double
cPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
c
Ptr Double
rowcndPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
colcndPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
amaxPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gbequb Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
rPtr Ptr Double
cPtr Ptr Double
rowcndPtr Ptr Double
colcndPtr Ptr Double
amaxPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
r
IO
(Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
c
IO
(Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Double
-> IO
(Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rowcndPtr
IO
(Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Double
-> IO
(Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
colcndPtr
IO
(Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Double
-> IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
amaxPtr
IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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)
gbrfs ::
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
gbrfs :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
gbrfs Char
trans Int
kl Int
ku Array (ZeroInt, ZeroInt) (Complex Double)
ab Array (ZeroInt, ZeroInt) (Complex Double)
afb Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr (Complex Double)
afbPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
afb
Ptr CInt
ldafbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldafb
Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gbrfs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr (Complex Double)
afbPtr Ptr CInt
ldafbPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
gbsv ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt CInt, Int)
gbsv :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt CInt, Int)
gbsv Int
kl Int
ku IOArray (ZeroInt, ZeroInt) (Complex Double)
ab IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbsv Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt CInt ->
Char ->
IOArray ZeroInt Double ->
IOArray ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Char, Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)
gbsvx :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt CInt
-> Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
gbsvx Char
fact Char
trans Int
kl Int
ku IOArray (ZeroInt, ZeroInt) (Complex Double)
ab IOArray (ZeroInt, ZeroInt) (Complex Double)
afb IOArray ZeroInt CInt
ipiv Char
equed IOArray ZeroInt Double
r IOArray ZeroInt Double
c IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
transPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr (Complex Double)
afbPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
afb
Ptr CInt
ldafbPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, 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) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, 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) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
Ptr Double
rPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
r
Ptr Double
cPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
c
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
rcondPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CChar
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gbsvx Ptr CChar
factPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr (Complex Double)
afbPtr Ptr CInt
ldafbPtr Ptr CInt
ipivPtr Ptr CChar
equedPtr Ptr Double
rPtr Ptr Double
cPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Char
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> (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) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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)
gbtf2 ::
Int ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt CInt, Int)
gbtf2 :: Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt CInt, Int)
gbtf2 Int
m Int
kl Int
ku IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbtf2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Double)
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) (Complex Double) ->
IO (Array ZeroInt CInt, Int)
gbtrf :: Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt CInt, Int)
gbtrf Int
m Int
kl Int
ku IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbtrf Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Double)
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) (Complex Double) ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
gbtrs :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
gbtrs Char
trans Int
kl Int
ku Array (ZeroInt, ZeroInt) (Complex Double)
ab Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbtrs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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 Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
gebak :: Char
-> Char
-> Int
-> Int
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
gebak Char
job Char
side Int
ilo Int
ihi Array ZeroInt Double
scale IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
scalePtr <- Array ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
scale
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr (Complex Double)
vPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gebak Ptr CChar
jobPtr Ptr CChar
sidePtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
scalePtr Ptr CInt
mPtr Ptr (Complex Double)
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) (Complex Double) ->
IO (Int, Int, Array ZeroInt Double, Int)
gebal :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Int, Int, Array ZeroInt Double, Int)
gebal Char
job IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
scale <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Int, Array ZeroInt Double, Int)
IO
(Int, Int, Array ZeroInt Double, Int)
-> IO (Int, Int, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Int, Array ZeroInt Double, Int)
IO
(Int, Int, Array ZeroInt Double, Int)
-> IO (Int, Int, Array ZeroInt Double, Int))
-> ContT
(Int, Int, Array ZeroInt Double, Int)
IO
(Int, Int, Array ZeroInt Double, Int)
-> IO (Int, Int, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char -> FortranIO (Int, Int, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CInt
nPtr <- Int -> FortranIO (Int, Int, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Int, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
iloPtr <- FortranIO (Int, Int, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
ihiPtr <- FortranIO (Int, Int, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
scalePtr <- IOArray ZeroInt Double
-> FortranIO (Int, Int, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
scale
Ptr CInt
infoPtr <- FortranIO (Int, Int, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Int, Int, Array ZeroInt Double, Int) IO ()
forall a. IO a -> ContT (Int, Int, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int, Array ZeroInt Double, Int) IO ())
-> IO () -> ContT (Int, Int, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gebal Ptr CChar
jobPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
scalePtr Ptr CInt
infoPtr
IO (Int, Int, Array ZeroInt Double, Int)
-> ContT
(Int, Int, Array ZeroInt Double, Int)
IO
(Int, Int, Array ZeroInt Double, Int)
forall a. IO a -> ContT (Int, Int, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int, Array ZeroInt Double, Int)
-> ContT
(Int, Int, Array ZeroInt Double, Int)
IO
(Int, Int, Array ZeroInt Double, Int))
-> IO (Int, Int, Array ZeroInt Double, Int)
-> ContT
(Int, Int, Array ZeroInt Double, Int)
IO
(Int, Int, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Int
-> Array ZeroInt Double
-> Int
-> (Int, Int, Array ZeroInt Double, Int))
-> IO
(Int
-> Int
-> Array ZeroInt Double
-> Int
-> (Int, Int, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Int
-> Int
-> Array ZeroInt Double
-> Int
-> (Int, Int, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Int
-> Array ZeroInt Double
-> Int
-> (Int, Int, Array 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
iloPtr)
IO
(Int
-> Array ZeroInt Double
-> Int
-> (Int, Int, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Array ZeroInt Double
-> Int -> (Int, Int, Array 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
ihiPtr)
IO
(Array ZeroInt Double
-> Int -> (Int, Int, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Int, Int, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
scale
IO (Int -> (Int, Int, Array ZeroInt Double, Int))
-> IO Int -> IO (Int, Int, Array 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)
gebd2 ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int)
gebd2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
gebd2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
d <- Int -> IO (IOArray ZeroInt Double)
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 Double
e <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double)
tauq <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
taup <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
tauqPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tauq
Ptr (Complex Double)
taupPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
taup
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.gebd2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
dPtr Ptr Double
ePtr Ptr (Complex Double)
tauqPtr Ptr (Complex Double)
taupPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
d
IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
e
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tauq
IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
taup
IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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)
gebrd ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int)
gebrd :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
gebrd Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
d <- Int -> IO (IOArray ZeroInt Double)
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 Double
e <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double)
tauq <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
taup <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
tauqPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tauq
Ptr (Complex Double)
taupPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
taup
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gebrd Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
dPtr Ptr Double
ePtr Ptr (Complex Double)
tauqPtr Ptr (Complex Double)
taupPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
d
IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
e
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tauq
IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
taup
IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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)
gecon ::
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Double ->
IO (Double, Int)
gecon :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> IO (Double, Int)
gecon Char
norm Array (ZeroInt, ZeroInt) (Complex Double)
a Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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 (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
anormPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
anorm
Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gecon Ptr CChar
normPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
geequ ::
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)
geequ :: Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
geequ Int
m Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
r <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Double
c <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
rPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
r
Ptr Double
cPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
c
Ptr Double
rowcndPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
colcndPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
amaxPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.geequ Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
rPtr Ptr Double
cPtr Ptr Double
rowcndPtr Ptr Double
colcndPtr Ptr Double
amaxPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
r
IO
(Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
c
IO
(Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Double
-> IO
(Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rowcndPtr
IO
(Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Double
-> IO
(Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
colcndPtr
IO
(Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Double
-> IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
amaxPtr
IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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)
geequb ::
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)
geequb :: Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
geequb Int
m Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
r <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt Double
c <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
rPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
r
Ptr Double
cPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
c
Ptr Double
rowcndPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
colcndPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
amaxPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.geequb Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
rPtr Ptr Double
cPtr Ptr Double
rowcndPtr Ptr Double
colcndPtr Ptr Double
amaxPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
r
IO
(Array ZeroInt Double
-> Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
c
IO
(Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Double
-> IO
(Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rowcndPtr
IO
(Double
-> Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Double
-> IO
(Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
colcndPtr
IO
(Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Double
-> IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
amaxPtr
IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Double, Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double, Double, Double,
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)
gees ::
Char ->
Char ->
FunPtr (Ptr (Complex Double) -> IO Bool) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO (Int, Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)
gees :: Char
-> Char
-> FunPtr (Ptr (Complex Double) -> IO Bool)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
gees Char
jobvs Char
sort FunPtr (Ptr (Complex Double) -> IO Bool)
select IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
w <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
vs <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
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 (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobvsPtr <- Char
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvs
Ptr CChar
sortPtr <- Char
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
FunPtr (Ptr (Complex Double) -> IO Bool)
selectPtr <- FunPtr (Ptr (Complex Double) -> IO Bool)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(FunPtr (Ptr (Complex Double) -> IO Bool))
forall a.
a
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr (Complex Double) -> IO Bool)
select
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
sdimPtr <- FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
wPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
w
Ptr (Complex Double)
vsPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vs
Ptr CInt
ldvsPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvs
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), 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 (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr (Complex Double) -> IO Bool)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.gees Ptr CChar
jobvsPtr Ptr CChar
sortPtr FunPtr (Ptr (Complex Double) -> IO Bool)
selectPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
sdimPtr Ptr (Complex Double)
wPtr Ptr (Complex Double)
vsPtr Ptr CInt
ldvsPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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
sdimPtr)
IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vs
IO
(Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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)
geesx ::
Char ->
Char ->
FunPtr (Ptr (Complex Double) -> IO Bool) ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO (Int, Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Double, Double, Int)
geesx :: Char
-> Char
-> FunPtr (Ptr (Complex Double) -> IO Bool)
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
geesx Char
jobvs Char
sort FunPtr (Ptr (Complex Double) -> IO Bool)
select Char
sense IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
w <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
vs <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
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 (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
-> IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
-> IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int))
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
-> IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobvsPtr <- Char
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvs
Ptr CChar
sortPtr <- Char
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
FunPtr (Ptr (Complex Double) -> IO Bool)
selectPtr <- FunPtr (Ptr (Complex Double) -> IO Bool)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
IO
(FunPtr (Ptr (Complex Double) -> IO Bool))
forall a.
a
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
IO
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr (Complex Double) -> IO Bool)
select
Ptr CChar
sensePtr <- Char
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sense
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
sdimPtr <- FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
wPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
w
Ptr (Complex Double)
vsPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vs
Ptr CInt
ldvsPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvs
Ptr Double
rcondePtr <- FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
rcondvPtr <- FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, 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 (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr (Complex Double) -> IO Bool)
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.geesx Ptr CChar
jobvsPtr Ptr CChar
sortPtr FunPtr (Ptr (Complex Double) -> IO Bool)
selectPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
sdimPtr Ptr (Complex Double)
wPtr Ptr (Complex Double)
vsPtr Ptr CInt
ldvsPtr Ptr Double
rcondePtr Ptr Double
rcondvPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int))
-> IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int))
-> IO
(Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int))
-> IO Int
-> IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, 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
sdimPtr)
IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Double
-> Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vs
IO
(Double
-> Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int))
-> IO Double
-> IO
(Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondePtr
IO
(Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int))
-> IO Double
-> IO
(Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondvPtr
IO
(Int
-> (Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, Double, Int))
-> IO Int
-> IO
(Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Double, 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)
geev ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
IO (Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)
geev :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
geev Char
jobvl Char
jobvr IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
w <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
IOArray (ZeroInt, ZeroInt) (Complex Double)
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvr
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobvlPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvl
Ptr CChar
jobvrPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvr
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
wPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
w
Ptr (Complex Double)
vlPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vl
Ptr CInt
ldvlPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr (Complex Double)
vrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vr
Ptr CInt
ldvrPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.geev Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
wPtr Ptr (Complex Double)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Double)
vrPtr Ptr CInt
ldvrPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vl
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vr
IO
(Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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)
geevx ::
Char ->
Char ->
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
IO (Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)
geevx :: Char
-> Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
geevx Char
balanc Char
jobvl Char
jobvr Char
sense IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
w <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
IOArray (ZeroInt, ZeroInt) (Complex Double)
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvr
IOArray ZeroInt Double
scale <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
rconde <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
rcondv <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
balancPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
balanc
Ptr CChar
jobvlPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvl
Ptr CChar
jobvrPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvr
Ptr CChar
sensePtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sense
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
wPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
w
Ptr (Complex Double)
vlPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vl
Ptr CInt
ldvlPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr (Complex Double)
vrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vr
Ptr CInt
ldvrPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr CInt
iloPtr <- FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
ihiPtr <- FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
scalePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
scale
Ptr Double
abnrmPtr <- FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
rcondePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rconde
Ptr Double
rcondvPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rcondv
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.geevx Ptr CChar
balancPtr Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
wPtr Ptr (Complex Double)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Double)
vrPtr Ptr CInt
ldvrPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
scalePtr Ptr Double
abnrmPtr Ptr Double
rcondePtr Ptr Double
rcondvPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,)
IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vl
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> Int
-> Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vr
IO
(Int
-> Int
-> Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO Int
-> IO
(Int
-> Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array 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
iloPtr)
IO
(Int
-> Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO Int
-> IO
(Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array 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
ihiPtr)
IO
(Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
scale
IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
abnrmPtr
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
rconde
IO
(Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
rcondv
IO
(Int
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO Int
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Double, Array ZeroInt Double,
Array 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)
gehd2 ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt (Complex Double), Int)
gehd2 :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt (Complex Double), Int)
gehd2 Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.gehd2 Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
gehrd ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt (Complex Double), Int)
gehrd :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt (Complex Double), Int)
gehrd Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gehrd Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
gelq2 ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt (Complex Double), Int)
gelq2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt (Complex Double), Int)
gelq2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.gelq2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
gelqf ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt (Complex Double), Int)
gelqf :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt (Complex Double), Int)
gelqf Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gelqf Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
gels ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
gels :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
gels Char
trans Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gels Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Double ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Double, Int, Int)
gelsd :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Double, Int, Int)
gelsd Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
b Double
rcond Int
lwork Int
lrwork 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
s <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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
lrwork])
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 Double, Int, Int)
IO
(Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Int, Int))
-> ContT
(Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr Double
rcondPtr <- Double -> FortranIO (Array ZeroInt Double, Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rcond
Ptr CInt
rankPtr <- FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt Double, 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 Double, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Double, Int, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Double, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Int, Int) IO ())
-> IO () -> ContT (Array ZeroInt Double, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gelsd Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr Double
sPtr Ptr Double
rcondPtr Ptr CInt
rankPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Int, Int)
forall a. IO a -> ContT (Array ZeroInt Double, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Int, Int))
-> IO (Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Int -> Int -> (Array ZeroInt Double, Int, Int))
-> IO
(Array ZeroInt Double
-> Int -> Int -> (Array ZeroInt Double, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Int -> Int -> (Array ZeroInt Double, Int, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> Int -> (Array ZeroInt Double, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
s
IO (Int -> Int -> (Array ZeroInt Double, Int, Int))
-> IO Int -> IO (Int -> (Array ZeroInt Double, 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 Double, Int, Int))
-> IO Int -> IO (Array ZeroInt Double, 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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Double ->
Int ->
IO (Array ZeroInt Double, Int, Int)
gelss :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Int
-> IO (Array ZeroInt Double, Int, Int)
gelss Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
b Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
s <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> 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 Double, Int, Int)
IO
(Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Int, Int))
-> ContT
(Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int -> FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr Double
rcondPtr <- Double -> FortranIO (Array ZeroInt Double, Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rcond
Ptr CInt
rankPtr <- FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Double, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Double, Int, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Double, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Int, Int) IO ())
-> IO () -> ContT (Array ZeroInt Double, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gelss Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr Double
sPtr Ptr Double
rcondPtr Ptr CInt
rankPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Int, Int)
forall a. IO a -> ContT (Array ZeroInt Double, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Int, Int))
-> IO (Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Int -> Int -> (Array ZeroInt Double, Int, Int))
-> IO
(Array ZeroInt Double
-> Int -> Int -> (Array ZeroInt Double, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Int -> Int -> (Array ZeroInt Double, Int, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> Int -> (Array ZeroInt Double, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
s
IO (Int -> Int -> (Array ZeroInt Double, Int, Int))
-> IO Int -> IO (Int -> (Array ZeroInt Double, 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 Double, Int, Int))
-> IO Int -> IO (Array ZeroInt Double, 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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt CInt ->
Double ->
Int ->
IO (Int, Int)
gelsy :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt CInt
-> Double
-> Int
-> IO (Int, Int)
gelsy Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
b IOArray ZeroInt CInt
jpvt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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, 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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
rcondPtr <- Double -> FortranIO (Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rcond
Ptr CInt
rankPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gelsy Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr CInt
jpvtPtr Ptr Double
rcondPtr Ptr CInt
rankPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr 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) (Complex Double) ->
IO (Array ZeroInt (Complex Double), Int)
geql2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt (Complex Double), Int)
geql2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.geql2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
geqlf ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt (Complex Double), Int)
geqlf :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt (Complex Double), Int)
geqlf Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geqlf Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
geqp3 ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt CInt ->
Int ->
IO (Array ZeroInt (Complex Double), Int)
geqp3 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt CInt
-> Int
-> IO (Array ZeroInt (Complex Double), Int)
geqp3 Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
jpvtPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpvt
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.geqp3 Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
jpvtPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
geqr2 ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt (Complex Double), Int)
geqr2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt (Complex Double), Int)
geqr2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.geqr2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
geqr2p ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt (Complex Double), Int)
geqr2p :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt (Complex Double), Int)
geqr2p Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.geqr2p Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
geqrf ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt (Complex Double), Int)
geqrf :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt (Complex Double), Int)
geqrf Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geqrf Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
geqrfp ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt (Complex Double), Int)
geqrfp :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt (Complex Double), Int)
geqrfp Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geqrfp Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
gerfs ::
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
gerfs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
gerfs Char
trans Array (ZeroInt, ZeroInt) (Complex Double)
a Array (ZeroInt, ZeroInt) (Complex Double)
af Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
afPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
af
Ptr CInt
ldafPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gerfs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
gerq2 ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt (Complex Double), Int)
gerq2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt (Complex Double), Int)
gerq2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.gerq2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
gerqf ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt (Complex Double), Int)
gerqf :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt (Complex Double), Int)
gerqf Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gerqf Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
gesc2 ::
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
IO (Double)
gesc2 :: Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> IO Double
gesc2 Array (ZeroInt, ZeroInt) (Complex Double)
a IOArray ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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
let _rhsSize :: Int
_rhsSize = 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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
rhsPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
rhs
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Double (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 Double (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
jpiv
Ptr Double
scalePtr <- FortranIO Double (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Double IO ()
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Double IO ()) -> IO () -> ContT Double IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> IO ()
FFI.gesc2 Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
rhsPtr Ptr CInt
ipivPtr Ptr CInt
jpivPtr Ptr Double
scalePtr
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
scalePtr
gesdd ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)
gesdd :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
gesdd Char
jobz Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
a Int
ucol Int
ldu Int
ldvt Int
lwork Int
lrwork = 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
s <- Int -> IO (IOArray ZeroInt Double)
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) (Complex Double)
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
ucol Int
ldu
IOArray (ZeroInt, ZeroInt) (Complex Double)
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvt
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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
lrwork])
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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr (Complex Double)
uPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr (Complex Double)
vtPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vt
Ptr CInt
ldvtPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gesdd Ptr CChar
jobzPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
sPtr Ptr (Complex Double)
uPtr Ptr CInt
lduPtr Ptr (Complex Double)
vtPtr Ptr CInt
ldvtPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
s
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
u
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vt
IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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)
gesv ::
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt CInt, Int)
gesv :: IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt CInt, Int)
gesv IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gesv Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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) (Complex Double) ->
Int ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)
gesvd :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
gesvd Char
jobu Char
jobvt Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
s <- Int -> IO (IOArray ZeroInt Double)
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) (Complex Double)
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
ucol Int
ldu
IOArray (ZeroInt, ZeroInt) (Complex Double)
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvt
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> 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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobuPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu
Ptr CChar
jobvtPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvt
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr (Complex Double)
uPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr (Complex Double)
vtPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vt
Ptr CInt
ldvtPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gesvd Ptr CChar
jobuPtr Ptr CChar
jobvtPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
sPtr Ptr (Complex Double)
uPtr Ptr CInt
lduPtr Ptr (Complex Double)
vtPtr Ptr CInt
ldvtPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
s
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
u
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vt
IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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)
gesvx ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt CInt ->
Char ->
IOArray ZeroInt Double ->
IOArray ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Char, Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)
gesvx :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt CInt
-> Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
gesvx Char
fact Char
trans IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
af IOArray ZeroInt CInt
ipiv Char
equed IOArray ZeroInt Double
r IOArray ZeroInt Double
c IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
transPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
afPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
af
Ptr CInt
ldafPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, 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) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, 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) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
Ptr Double
rPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
r
Ptr Double
cPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
c
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
rcondPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CChar
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gesvx Ptr CChar
factPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr CChar
equedPtr Ptr Double
rPtr Ptr Double
cPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Char
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> (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) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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)
getc2 ::
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
getc2 :: IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
getc2 IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getc2 Ptr CInt
nPtr Ptr (Complex Double)
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) (Complex Double) ->
IO (Array ZeroInt CInt, Int)
getf2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt CInt, Int)
getf2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getf2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
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) (Complex Double) ->
IO (Array ZeroInt CInt, Int)
getrf :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt CInt, Int)
getrf Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getrf Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
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) (Complex Double) ->
Array ZeroInt CInt ->
Int ->
IO (Int)
getri :: IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt -> Int -> IO Int
getri IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getri Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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) (Complex Double) ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
getrs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
getrs Char
trans Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getrs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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 Double ->
Array ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
ggbak :: Char
-> Char
-> Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
ggbak Char
job Char
side Int
ilo Int
ihi Array ZeroInt Double
lscale Array ZeroInt Double
rscale IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
lscalePtr <- Array ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
lscale
Ptr Double
rscalePtr <- Array ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
rscale
Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr (Complex Double)
vPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggbak Ptr CChar
jobPtr Ptr CChar
sidePtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
lscalePtr Ptr Double
rscalePtr Ptr CInt
mPtr Ptr (Complex Double)
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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
ggbal :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
ggbal Char
job IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
lscale <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
rscale <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char
-> FortranIO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
iloPtr <- FortranIO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
ihiPtr <- FortranIO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
lscalePtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
lscale
Ptr Double
rscalePtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rscale
Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
Ptr CInt
infoPtr <- FortranIO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ggbal Ptr CChar
jobPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
lscalePtr Ptr Double
rscalePtr Ptr Double
workPtr Ptr CInt
infoPtr
IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Int, Array ZeroInt Double, Array 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
iloPtr)
IO
(Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Int, Array ZeroInt Double, Array 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
ihiPtr)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Int, Int, Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
lscale
IO
(Array ZeroInt Double
-> Int
-> (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Int, Int, Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
rscale
IO
(Int
-> (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO (Int, Int, Array ZeroInt Double, Array 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)
gges ::
Char ->
Char ->
Char ->
FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
IO (Int, Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)
gges :: Char
-> Char
-> Char
-> FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
gges Char
jobvsl Char
jobvsr Char
sort FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool)
selctg IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
alpha <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
beta <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
vsl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsl
IOArray (ZeroInt, ZeroInt) (Complex Double)
vsr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsr
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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 Bool
bwork <- Int -> IO (IOArray ZeroInt Bool)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobvslPtr <- Char
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvsl
Ptr CChar
jobvsrPtr <- Char
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvsr
Ptr CChar
sortPtr <- Char
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool)
selctgPtr <- FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool))
forall a.
a
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool)
selctg
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
sdimPtr <- FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
alphaPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
alpha
Ptr (Complex Double)
betaPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
beta
Ptr (Complex Double)
vslPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vsl
Ptr CInt
ldvslPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsl
Ptr (Complex Double)
vsrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vsr
Ptr CInt
ldvsrPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), 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 (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.gges Ptr CChar
jobvslPtr Ptr CChar
jobvsrPtr Ptr CChar
sortPtr FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool)
selctgPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr CInt
sdimPtr Ptr (Complex Double)
alphaPtr Ptr (Complex Double)
betaPtr Ptr (Complex Double)
vslPtr Ptr CInt
ldvslPtr Ptr (Complex Double)
vsrPtr Ptr CInt
ldvsrPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Int
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Int
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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
sdimPtr)
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
alpha
IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
beta
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vsl
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vsr
IO
(Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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)
ggesx ::
Char ->
Char ->
Char ->
FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool) ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
Int ->
IO (Int, Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt Double, Array ZeroInt Double, Int)
ggesx :: Char
-> Char
-> Char
-> FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool)
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> Int
-> IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
ggesx Char
jobvsl Char
jobvsr Char
sort FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool)
selctg Char
sense IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
alpha <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
beta <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
vsl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsl
IOArray (ZeroInt, ZeroInt) (Complex Double)
vsr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsr
IOArray ZeroInt Double
rconde <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
IOArray ZeroInt Double
rcondv <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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] -> 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 (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
-> IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
-> IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int))
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
-> IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobvslPtr <- Char
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvsl
Ptr CChar
jobvsrPtr <- Char
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvsr
Ptr CChar
sortPtr <- Char
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool)
selctgPtr <- FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
(FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool))
forall a.
a
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
a
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool)
selctg
Ptr CChar
sensePtr <- Char
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sense
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr CInt
sdimPtr <- FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
alphaPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
alpha
Ptr (Complex Double)
betaPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
beta
Ptr (Complex Double)
vslPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vsl
Ptr CInt
ldvslPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsl
Ptr (Complex Double)
vsrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vsr
Ptr CInt
ldvsrPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsr
Ptr Double
rcondePtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rconde
Ptr Double
rcondvPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rcondv
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, 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 (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, 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 (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool)
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.ggesx Ptr CChar
jobvslPtr Ptr CChar
jobvsrPtr Ptr CChar
sortPtr FunPtr (Ptr (Complex Double) -> Ptr (Complex Double) -> IO Bool)
selctgPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr CInt
sdimPtr Ptr (Complex Double)
alphaPtr Ptr (Complex Double)
betaPtr Ptr (Complex Double)
vslPtr Ptr CInt
ldvslPtr Ptr (Complex Double)
vsrPtr Ptr CInt
ldvsrPtr Ptr Double
rcondePtr Ptr Double
rcondvPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
-> ContT
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO
(Int
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,)
IO
(Int
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO Int
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array 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
sdimPtr)
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
alpha
IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
beta
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vsl
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vsr
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
rconde
IO
(Array ZeroInt Double
-> Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
rcondv
IO
(Int
-> (Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt Double, Int))
-> IO Int
-> IO
(Int, Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array 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)
ggev ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
IO (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)
ggev :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
ggev Char
jobvl Char
jobvr IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
alpha <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
beta <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
IOArray (ZeroInt, ZeroInt) (Complex Double)
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvr
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobvlPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvl
Ptr CChar
jobvrPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvr
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
alphaPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
alpha
Ptr (Complex Double)
betaPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
beta
Ptr (Complex Double)
vlPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vl
Ptr CInt
ldvlPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr (Complex Double)
vrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vr
Ptr CInt
ldvrPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ggev Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
alphaPtr Ptr (Complex Double)
betaPtr Ptr (Complex Double)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Double)
vrPtr Ptr CInt
ldvrPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
alpha
IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
beta
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vl
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vr
IO
(Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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)
ggevx ::
Char ->
Char ->
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
Int ->
IO (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)
ggevx :: Char
-> Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
ggevx Char
balanc Char
jobvl Char
jobvr Char
sense IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
b Int
ldvl Int
ldvr Int
lwork Int
lrwork = 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
alpha <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
beta <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
IOArray (ZeroInt, ZeroInt) (Complex Double)
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvr
IOArray ZeroInt Double
lscale <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
rscale <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
rconde <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
rcondv <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lrwork
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
2)
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 (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
balancPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
balanc
Ptr CChar
jobvlPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvl
Ptr CChar
jobvrPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvr
Ptr CChar
sensePtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sense
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
alphaPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
alpha
Ptr (Complex Double)
betaPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
beta
Ptr (Complex Double)
vlPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vl
Ptr CInt
ldvlPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr (Complex Double)
vrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vr
Ptr CInt
ldvrPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr CInt
iloPtr <- FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
ihiPtr <- FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
lscalePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
lscale
Ptr Double
rscalePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rscale
Ptr Double
abnrmPtr <- FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
bbnrmPtr <- FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
rcondePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rconde
Ptr Double
rcondvPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rcondv
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, 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 (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, 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 (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> 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 (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
alphaPtr Ptr (Complex Double)
betaPtr Ptr (Complex Double)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Double)
vrPtr Ptr CInt
ldvrPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
lscalePtr Ptr Double
rscalePtr Ptr Double
abnrmPtr Ptr Double
bbnrmPtr Ptr Double
rcondePtr Ptr Double
rcondvPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
iworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,,)
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
alpha
IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
beta
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vl
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
vr
IO
(Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array 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
iloPtr)
IO
(Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array 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
ihiPtr)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
lscale
IO
(Array ZeroInt Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
rscale
IO
(Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
abnrmPtr
IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
bbnrmPtr
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
rconde
IO
(Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
rcondv
IO
(Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int, Int,
Array ZeroInt Double, Array ZeroInt Double, Double, Double,
Array ZeroInt Double, Array 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)
ggglm ::
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
Int ->
IO (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int)
ggglm :: IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> Int
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
ggglm IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
b IOArray ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double)
x <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt (Complex Double)
y <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
p
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
pPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
dPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
d
Ptr (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
Ptr (Complex Double)
yPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
y
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggglm Ptr CInt
nPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
dPtr Ptr (Complex Double)
xPtr Ptr (Complex Double)
yPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
x
IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
y
IO
(Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO Int
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex 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)
gghrd ::
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
gghrd :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
gghrd Char
compq Char
compz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
q IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gghrd Ptr CChar
compqPtr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr (Complex Double)
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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
Int ->
IO (Array ZeroInt (Complex Double), Int)
gglse :: IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> Int
-> IO (Array ZeroInt (Complex Double), Int)
gglse IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
b IOArray ZeroInt (Complex Double)
c IOArray ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double)
x <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
pPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
cPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
c
Ptr (Complex Double)
dPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
d
Ptr (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gglse Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
pPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
cPtr Ptr (Complex Double)
dPtr Ptr (Complex Double)
xPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
x
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
ggqrf ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int)
ggqrf :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
ggqrf Int
n IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
taua <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
taub <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
pPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauaPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
taua
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
taubPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
taub
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggqrf Ptr CInt
nPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
taubPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
taua
IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
taub
IO
(Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO Int
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex 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)
ggrqf ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int)
ggrqf :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
ggrqf Int
m Int
p IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
taua <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
taub <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
pPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauaPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
taua
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
taubPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
taub
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggrqf Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
taubPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
taua
IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
taub
IO
(Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO Int
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex 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)
gtcon ::
Char ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt CInt ->
Double ->
IO (Double, Int)
gtcon :: Char
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt CInt
-> Double
-> IO (Double, Int)
gtcon Char
norm Array ZeroInt (Complex Double)
dl Array ZeroInt (Complex Double)
d Array ZeroInt (Complex Double)
du Array ZeroInt (Complex Double)
du2 Array ZeroInt CInt
ipiv Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
dlPtr <- Array ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
dl
Ptr (Complex Double)
dPtr <- Array ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
d
Ptr (Complex Double)
duPtr <- Array ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
du
Ptr (Complex Double)
du2Ptr <- Array ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
du2
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Double, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Double
anormPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
anorm
Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.gtcon Ptr CChar
normPtr Ptr CInt
nPtr Ptr (Complex Double)
dlPtr Ptr (Complex Double)
dPtr Ptr (Complex Double)
duPtr Ptr (Complex Double)
du2Ptr Ptr CInt
ipivPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
gtrfs ::
Char ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
gtrfs :: Char
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
gtrfs Char
trans Array ZeroInt (Complex Double)
dl Array ZeroInt (Complex Double)
d Array ZeroInt (Complex Double)
du Array ZeroInt (Complex Double)
dlf Array ZeroInt (Complex Double)
df Array ZeroInt (Complex Double)
duf Array ZeroInt (Complex Double)
du2 Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
dlPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
dl
Ptr (Complex Double)
dPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
d
Ptr (Complex Double)
duPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
du
Ptr (Complex Double)
dlfPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
dlf
Ptr (Complex Double)
dfPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
df
Ptr (Complex Double)
dufPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
duf
Ptr (Complex Double)
du2Ptr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
du2
Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gtrfs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
dlPtr Ptr (Complex Double)
dPtr Ptr (Complex Double)
duPtr Ptr (Complex Double)
dlfPtr Ptr (Complex Double)
dfPtr Ptr (Complex Double)
dufPtr Ptr (Complex Double)
du2Ptr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
gtsv ::
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
gtsv :: IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
gtsv IOArray ZeroInt (Complex Double)
dl IOArray ZeroInt (Complex Double)
d IOArray ZeroInt (Complex Double)
du IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
dlPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
dl
Ptr (Complex Double)
dPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
d
Ptr (Complex Double)
duPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
du
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gtsv Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
dlPtr Ptr (Complex Double)
dPtr Ptr (Complex Double)
duPtr Ptr (Complex Double)
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 (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt CInt ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)
gtsvx :: Char
-> Char
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
gtsvx Char
fact Char
trans Array ZeroInt (Complex Double)
dl Array ZeroInt (Complex Double)
d Array ZeroInt (Complex Double)
du IOArray ZeroInt (Complex Double)
dlf IOArray ZeroInt (Complex Double)
df IOArray ZeroInt (Complex Double)
duf IOArray ZeroInt (Complex Double)
du2 IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
transPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
dlPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
dl
Ptr (Complex Double)
dPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
d
Ptr (Complex Double)
duPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
du
Ptr (Complex Double)
dlfPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
dlf
Ptr (Complex Double)
dfPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
df
Ptr (Complex Double)
dufPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
duf
Ptr (Complex Double)
du2Ptr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
du2
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
rcondPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gtsvx Ptr CChar
factPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
dlPtr Ptr (Complex Double)
dPtr Ptr (Complex Double)
duPtr Ptr (Complex Double)
dlfPtr Ptr (Complex Double)
dfPtr Ptr (Complex Double)
dufPtr Ptr (Complex Double)
du2Ptr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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)
gttrf ::
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IO (Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
gttrf :: IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IO (Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
gttrf IOArray ZeroInt (Complex Double)
dl IOArray ZeroInt (Complex Double)
d IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double)
du2 <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Array ZeroInt CInt, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
-> IO (Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
-> IO (Array ZeroInt (Complex Double), Array ZeroInt CInt, Int))
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
-> IO (Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
dlPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
dl
Ptr (Complex Double)
dPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
d
Ptr (Complex Double)
duPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
du
Ptr (Complex Double)
du2Ptr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
du2
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt (Complex Double), 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 (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int) IO ()
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gttrf Ptr CInt
nPtr Ptr (Complex Double)
dlPtr Ptr (Complex Double)
dPtr Ptr (Complex Double)
duPtr Ptr (Complex Double)
du2Ptr Ptr CInt
ipivPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt CInt, Int))
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt CInt
-> Int
-> (Array ZeroInt (Complex Double), 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
du2
IO
(Array ZeroInt CInt
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int -> (Array ZeroInt (Complex Double), 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 (Complex Double), Array ZeroInt CInt, Int))
-> IO Int
-> IO (Array ZeroInt (Complex Double), 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 (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
gttrs :: Char
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
gttrs Char
trans Array ZeroInt (Complex Double)
dl Array ZeroInt (Complex Double)
d Array ZeroInt (Complex Double)
du Array ZeroInt (Complex Double)
du2 Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
dlPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
dl
Ptr (Complex Double)
dPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
d
Ptr (Complex Double)
duPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
du
Ptr (Complex Double)
du2Ptr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gttrs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
dlPtr Ptr (Complex Double)
dPtr Ptr (Complex Double)
duPtr Ptr (Complex Double)
du2Ptr Ptr CInt
ipivPtr Ptr (Complex Double)
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 (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO ()
gtts2 :: Int
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO ()
gtts2 Int
itrans Array ZeroInt (Complex Double)
dl Array ZeroInt (Complex Double)
d Array ZeroInt (Complex Double)
du Array ZeroInt (Complex Double)
du2 Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
dlPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
dl
Ptr (Complex Double)
dPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
d
Ptr (Complex Double)
duPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
du
Ptr (Complex Double)
du2Ptr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.gtts2 Ptr CInt
itransPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
dlPtr Ptr (Complex Double)
dPtr Ptr (Complex Double)
duPtr Ptr (Complex Double)
du2Ptr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr
hbev ::
Char ->
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)
hbev :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
hbev Char
jobz Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.hbev Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex 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)
hbevd ::
Char ->
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)
hbevd :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
hbevd Char
jobz Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Double)
ab Int
ldz Int
lwork Int
rworkSize Int
lrwork 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
lrworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hbevd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex 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)
hbevx ::
Char ->
Char ->
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Double ->
Double ->
Int ->
Int ->
Double ->
Int ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
hbevx :: Char
-> Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
hbevx Char
jobz Char
range Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Double)
ab Int
ldq Double
vl Double
vu Int
il Int
iu Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray (ZeroInt, ZeroInt) (Complex Double)
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq
IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Double
vlPtr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vl
Ptr Double
vuPtr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Double
abstolPtr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
abstol
Ptr CInt
mPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hbevx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Double
abstolPtr Ptr CInt
mPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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 Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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)
hbgst ::
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)
hbgst :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
hbgst Char
vect Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) (Complex Double)
ab Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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
"hbgst: n == bbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bbDim0)
IOArray (ZeroInt, ZeroInt) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldx
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
vectPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
vect
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kaPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ka
Ptr CInt
kbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
Ptr (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr (Complex Double)
bbPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
bb
Ptr CInt
ldbbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.hbgst Ptr CChar
vectPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr (Complex Double)
bbPtr Ptr CInt
ldbbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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)
hbgv ::
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)
hbgv :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
hbgv Char
jobz Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) (Complex Double)
ab IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hbgv: n == bbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bbDim0)
IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ka
Ptr CInt
kbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
Ptr (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr (Complex Double)
bbPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
bb
Ptr CInt
ldbbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbb
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.hbgv Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr (Complex Double)
bbPtr Ptr CInt
ldbbPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex 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)
hbgvd ::
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)
hbgvd :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
hbgvd Char
jobz Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) (Complex Double)
ab IOArray (ZeroInt, ZeroInt) (Complex Double)
bb Int
ldz Int
lwork Int
lrwork 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hbgvd: n == bbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bbDim0)
IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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
lrwork])
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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ka
Ptr CInt
kbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
Ptr (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr (Complex Double)
bbPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
bb
Ptr CInt
ldbbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbb
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
lrworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hbgvd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr (Complex Double)
bbPtr Ptr CInt
ldbbPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex 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)
hbgvx ::
Char ->
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Double ->
Double ->
Int ->
Int ->
Double ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
hbgvx :: Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
hbgvx Char
jobz Char
range Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) (Complex Double)
ab IOArray (ZeroInt, ZeroInt) (Complex Double)
bb Int
ldq Double
vl Double
vu Int
il Int
iu Double
abstol 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hbgvx: n == bbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bbDim0)
IOArray (ZeroInt, ZeroInt) (Complex Double)
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq
IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
Ptr (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr (Complex Double)
bbPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
bb
Ptr CInt
ldbbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbb
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Double
vlPtr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vl
Ptr Double
vuPtr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Double
abstolPtr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
abstol
Ptr CInt
mPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hbgvx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr (Complex Double)
bbPtr Ptr CInt
ldbbPtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Double
abstolPtr Ptr CInt
mPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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 Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array ZeroInt CInt, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int,
Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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)
hbtrd ::
Char ->
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
hbtrd :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
hbtrd Char
vect Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Double)
ab IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hbtrd: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
IOArray ZeroInt Double
d <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
e <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
vectPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
vect
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.hbtrd Ptr CChar
vectPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
dPtr Ptr Double
ePtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
d
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
e
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
hecon ::
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt CInt ->
Double ->
IO (Double, Int)
hecon :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Double
-> IO (Double, Int)
hecon Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt CInt
ipiv Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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
"hecon: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Double, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Double
anormPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
anorm
Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.hecon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
heequb ::
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Double, Double, Int)
heequb :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Double, Double, Int)
heequb Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
s <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int))
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr Double
scondPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
amaxPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Double, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ())
-> IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.heequb Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
amaxPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
forall a.
IO a -> ContT (Array ZeroInt Double, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int))
-> IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
-> IO
(Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Double
-> Double -> Int -> (Array ZeroInt Double, Double, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
s
IO
(Double
-> Double -> Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Double
-> IO
(Double -> Int -> (Array ZeroInt Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
scondPtr
IO (Double -> Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Double
-> IO (Int -> (Array ZeroInt Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
amaxPtr
IO (Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Double, 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)
heev ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt Double, Int)
heev :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt Double, Int)
heev Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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 Double, Int) IO (Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Int))
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Double, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Int) IO ())
-> IO () -> ContT (Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.heev Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
wPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
forall a. IO a -> ContT (Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double -> Int -> (Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double -> Int -> (Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Double -> Int -> (Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array 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)
heevd ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Double, Int)
heevd :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Double, Int)
heevd Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a Int
lwork Int
rworkSize Int
lrwork 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
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 Double, Int) IO (Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Int))
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
lrworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt Double, 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 Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Double, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Int) IO ())
-> IO () -> ContT (Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.heevd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
wPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
forall a. IO a -> ContT (Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double -> Int -> (Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double -> Int -> (Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Double -> Int -> (Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array 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)
heevr ::
Char ->
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Double ->
Double ->
Int ->
Int ->
Double ->
Int ->
Int ->
Int ->
Int ->
Int ->
IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
heevr :: Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
heevr Char
jobz Char
range Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a Double
vl Double
vu Int
il Int
iu Double
abstol Int
m Int
ldz Int
lwork Int
lrwork 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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
lrwork])
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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
vlPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vl
Ptr Double
vuPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Double
abstolPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
abstol
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
lrworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.heevr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Double
abstolPtr Ptr CInt
mPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr CInt
isuppzPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO Int
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO Int
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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)
heevx ::
Char ->
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Double ->
Double ->
Int ->
Int ->
Double ->
Int ->
Int ->
Int ->
IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
heevx :: Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> Int
-> Int
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
heevx Char
jobz Char
range Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a Double
vl Double
vu Int
il Int
iu Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
vlPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vl
Ptr Double
vuPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Double
abstolPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
abstol
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.heevx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Double
abstolPtr Ptr CInt
mPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO Int
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO Int
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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)
hegs2 ::
Int ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
hegs2 :: Int
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
hegs2 Int
itype Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hegs2: 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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hegs2 Ptr CInt
itypePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
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)
hegst ::
Int ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
hegst :: Int
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
hegst Int
itype Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hegst: 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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hegst Ptr CInt
itypePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
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)
hegv ::
Int ->
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt Double, Int)
hegv :: Int
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt Double, Int)
hegv Int
itype Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hegv: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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 Double, Int) IO (Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Int))
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
Ptr CChar
jobzPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Double, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Int) IO ())
-> IO () -> ContT (Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.hegv Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr Double
wPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
forall a. IO a -> ContT (Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double -> Int -> (Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double -> Int -> (Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Double -> Int -> (Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array 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)
hegvd ::
Int ->
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Double, Int)
hegvd :: Int
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Double, Int)
hegvd Int
itype Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
b Int
lwork Int
lrwork 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hegvd: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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
lrwork])
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 Double, Int) IO (Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Int))
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
Ptr CChar
jobzPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
lrworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt Double, 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 Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Double, Int) IO ()
forall a. IO a -> ContT (Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Int) IO ())
-> IO () -> ContT (Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hegvd Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr Double
wPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
forall a. IO a -> ContT (Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double -> Int -> (Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double -> Int -> (Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Double -> Int -> (Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array 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)
hegvx ::
Int ->
Char ->
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Double ->
Double ->
Int ->
Int ->
Double ->
Int ->
Int ->
Int ->
IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
hegvx :: Int
-> Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> Int
-> Int
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
hegvx Int
itype Char
jobz Char
range Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
b Double
vl Double
vu Int
il Int
iu Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hegvx: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Double
vlPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vl
Ptr Double
vuPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Double
abstolPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
abstol
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hegvx Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Double
abstolPtr Ptr CInt
mPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO Int
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO Int
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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)
herfs ::
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
herfs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
herfs Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
a Array (ZeroInt, ZeroInt) (Complex Double)
af Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"herfs: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
String -> Bool -> IO ()
Call.assert String
"herfs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
String -> Bool -> IO ()
Call.assert String
"herfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
afPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
af
Ptr CInt
ldafPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.herfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
hesv ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt CInt, Int)
hesv :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt CInt, Int)
hesv Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hesv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
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)
hesvx ::
Char ->
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt CInt ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)
hesvx :: Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
hesvx Char
fact Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
af IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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
"hesvx: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
String -> Bool -> IO ()
Call.assert String
"hesvx: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray (ZeroInt, ZeroInt) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
afPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
af
Ptr CInt
ldafPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
rcondPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.hesvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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)
heswapr ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO ()
heswapr :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO ()
heswapr Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.heswapr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
i1Ptr Ptr CInt
i2Ptr
hetd2 ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt (Complex Double), Int)
hetd2 :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
hetd2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
d <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
e <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.hetd2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
dPtr Ptr Double
ePtr Ptr (Complex Double)
tauPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
d
IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
e
IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex 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)
hetf2 ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt CInt, Int)
hetf2 :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt CInt, Int)
hetf2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hetf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
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)
hetrd ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt (Complex Double), Int)
hetrd :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
hetrd Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
d <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
e <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hetrd Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
dPtr Ptr Double
ePtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
d
IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
e
IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex 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)
hetrf ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt CInt, Int)
hetrf :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt CInt, Int)
hetrf Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hetrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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)
hetri ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt CInt ->
IO (Int)
hetri :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> IO Int
hetri Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hetri: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.hetri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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)
hetri2 ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt CInt ->
Int ->
Int ->
IO (Int)
hetri2 :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> Int
-> IO Int
hetri2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hetri2: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hetri2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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)
hetri2x ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt CInt ->
Int ->
IO (Int)
hetri2x :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> IO Int
hetri2x Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hetri2x: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray (ZeroInt, ZeroInt) (Complex Double)
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
workPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hetri2x Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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)
hetrs ::
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
hetrs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
hetrs Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hetrs: 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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hetrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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)
hetrs2 ::
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
hetrs2 :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
hetrs2 Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hetrs2: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.hetrs2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
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)
hfrk ::
Char ->
Char ->
Char ->
Int ->
Int ->
Double ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Double ->
IOArray ZeroInt (Complex Double) ->
IO ()
hfrk :: Char
-> Char
-> Char
-> Int
-> Int
-> Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> IOArray ZeroInt (Complex Double)
-> IO ()
hfrk Char
transr Char
uplo Char
trans Int
n Int
k Double
alpha Array (ZeroInt, ZeroInt) (Complex Double)
a Double
beta IOArray ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
c
let _ka :: Int
_ka = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"hfrk: n*(n+1)`div`2 == cDim0" (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
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 Double
alphaPtr <- Double -> FortranIO () (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
alpha
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
betaPtr <- Double -> FortranIO () (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
beta
Ptr (Complex Double)
cPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> IO ()
FFI.hfrk Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
alphaPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
betaPtr Ptr (Complex Double)
cPtr
hgeqz ::
Char ->
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int)
hgeqz :: Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
hgeqz Char
job Char
compq Char
compz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) (Complex Double)
h IOArray (ZeroInt, ZeroInt) (Complex Double)
t IOArray (ZeroInt, ZeroInt) (Complex Double)
q IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
alpha <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
beta <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CChar
compqPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compq
Ptr CChar
compzPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr (Complex Double)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
h
Ptr CInt
ldhPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr (Complex Double)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
t
Ptr CInt
ldtPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr (Complex Double)
alphaPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
alpha
Ptr (Complex Double)
betaPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
beta
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.hgeqz Ptr CChar
jobPtr Ptr CChar
compqPtr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Double)
hPtr Ptr CInt
ldhPtr Ptr (Complex Double)
tPtr Ptr CInt
ldtPtr Ptr (Complex Double)
alphaPtr Ptr (Complex Double)
betaPtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
alpha
IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
beta
IO
(Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO Int
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex 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)
hpcon ::
Char ->
Array ZeroInt (Complex Double) ->
Array ZeroInt CInt ->
Double ->
IO (Double, Int)
hpcon :: Char
-> Array ZeroInt (Complex Double)
-> Array ZeroInt CInt
-> Double
-> IO (Double, Int)
hpcon Char
uplo Array ZeroInt (Complex Double)
ap Array ZeroInt CInt
ipiv Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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
"hpcon: 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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Double, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Double
anormPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
anorm
Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.hpcon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr CInt
ipivPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
hpev ::
Char ->
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
Int ->
IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)
hpev :: Char
-> Char
-> Int
-> IOArray ZeroInt (Complex Double)
-> Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
hpev Char
jobz Char
uplo Int
n IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
ap
String -> Bool -> IO ()
Call.assert String
"hpev: 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 Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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
1])
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.hpev Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex 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)
hpevd ::
Char ->
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
Int ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)
hpevd :: Char
-> Char
-> Int
-> IOArray ZeroInt (Complex Double)
-> Int
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
hpevd Char
jobz Char
uplo Int
n IOArray ZeroInt (Complex Double)
ap Int
ldz Int
lwork Int
lrwork 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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
ap
String -> Bool -> IO ()
Call.assert String
"hpevd: 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 Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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
lrwork])
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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
lrworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hpevd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex 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)
hpevx ::
Char ->
Char ->
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
Double ->
Double ->
Int ->
Int ->
Double ->
Int ->
Int ->
IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
hpevx :: Char
-> Char
-> Char
-> Int
-> IOArray ZeroInt (Complex Double)
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> Int
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
hpevx Char
jobz Char
range Char
uplo Int
n IOArray ZeroInt (Complex Double)
ap Double
vl Double
vu Int
il Int
iu Double
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
ap
String -> Bool -> IO ()
Call.assert String
"hpevx: 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 Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
Ptr Double
vlPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vl
Ptr Double
vuPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Double
abstolPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
abstol
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hpevx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Double
abstolPtr Ptr CInt
mPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO Int
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO Int
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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)
hpgst ::
Int ->
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
IO (Int)
hpgst :: Int
-> Char
-> Int
-> IOArray ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> IO Int
hpgst Int
itype Char
uplo Int
n IOArray ZeroInt (Complex Double)
ap Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
bp
String -> Bool -> IO ()
Call.assert String
"hpgst: 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
"hpgst: 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 (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
Ptr (Complex Double)
bpPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.hpgst Ptr CInt
itypePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
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)
hpgv ::
Int ->
Char ->
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
Int ->
IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)
hpgv :: Int
-> Char
-> Char
-> Int
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
hpgv Int
itype Char
jobz Char
uplo Int
n IOArray ZeroInt (Complex Double)
ap IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
bp
String -> Bool -> IO ()
Call.assert String
"hpgv: 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
"hpgv: 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 Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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
1])
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
Ptr (Complex Double)
bpPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
bp
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.hpgv Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
bpPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex 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)
hpgvd ::
Int ->
Char ->
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
Int ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Int)
hpgvd :: Int
-> Char
-> Char
-> Int
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> Int
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
hpgvd Int
itype Char
jobz Char
uplo Int
n IOArray ZeroInt (Complex Double)
ap IOArray ZeroInt (Complex Double)
bp Int
ldz Int
lwork Int
lrwork 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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
bp
String -> Bool -> IO ()
Call.assert String
"hpgvd: 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
"hpgvd: 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 Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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
lrwork])
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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
Ptr (Complex Double)
bpPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
bp
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
lrworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hpgvd Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
bpPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int))
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex 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)
hpgvx ::
Int ->
Char ->
Char ->
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
Double ->
Double ->
Int ->
Int ->
Double ->
Int ->
IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
hpgvx :: Int
-> Char
-> Char
-> Char
-> Int
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
hpgvx Int
itype Char
jobz Char
range Char
uplo Int
n IOArray ZeroInt (Complex Double)
ap IOArray ZeroInt (Complex Double)
bp Double
vl Double
vu Int
il Int
iu Double
abstol 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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
bp
String -> Bool -> IO ()
Call.assert String
"hpgvx: 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
"hpgvx: 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 Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
itypePtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
Ptr (Complex Double)
bpPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
bp
Ptr Double
vlPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vl
Ptr Double
vuPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Double
abstolPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
abstol
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hpgvx Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
bpPtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Double
abstolPtr Ptr CInt
mPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO Int
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO Int
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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)
hprfs ::
Char ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
hprfs :: Char
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
hprfs Char
uplo Array ZeroInt (Complex Double)
ap Array ZeroInt (Complex Double)
afp Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hprfs: 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
"hprfs: 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
"hprfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
IOArray ZeroInt Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr (Complex Double)
afpPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
afp
Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.hprfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
afpPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
hpsv ::
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt CInt, Int)
hpsv :: Char
-> Int
-> IOArray ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt CInt, Int)
hpsv Char
uplo Int
n IOArray ZeroInt (Complex Double)
ap IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
b
let nrhs :: Int
nrhs = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"hpsv: 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 (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hpsv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
apPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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)
hpsvx ::
Char ->
Char ->
Array ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt CInt ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)
hpsvx :: Char
-> Char
-> Array ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
hpsvx Char
fact Char
uplo Array ZeroInt (Complex Double)
ap IOArray ZeroInt (Complex Double)
afp IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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
"hpsvx: 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
"hpsvx: 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) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr (Complex Double)
afpPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
afp
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
rcondPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.hpsvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
afpPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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)
hptrd ::
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt (Complex Double), Int)
hptrd :: Char
-> Int
-> IOArray ZeroInt (Complex Double)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
hptrd Char
uplo Int
n IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
ap
String -> Bool -> IO ()
Call.assert String
"hptrd: 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 Double
d <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
e <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.hptrd Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr Double
dPtr Ptr Double
ePtr Ptr (Complex Double)
tauPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
d
IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
e
IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex 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)
hptrf ::
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
IO (Array ZeroInt CInt, Int)
hptrf :: Char
-> Int
-> IOArray ZeroInt (Complex Double)
-> IO (Array ZeroInt CInt, Int)
hptrf Char
uplo Int
n IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
ap
String -> Bool -> IO ()
Call.assert String
"hptrf: 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 (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hptrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
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)
hptri ::
Char ->
IOArray ZeroInt (Complex Double) ->
Array ZeroInt CInt ->
IO (Int)
hptri :: Char
-> IOArray ZeroInt (Complex Double) -> Array ZeroInt CInt -> IO Int
hptri Char
uplo IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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
"hptri: 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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.hptri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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)
hptrs ::
Char ->
Array ZeroInt (Complex Double) ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
hptrs :: Char
-> Array ZeroInt (Complex Double)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
hptrs Char
uplo Array ZeroInt (Complex Double)
ap Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"hptrs: 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 (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hptrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
apPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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)
hsein ::
Char ->
Char ->
Char ->
Array ZeroInt Bool ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
hsein :: Char
-> Char
-> Char
-> Array ZeroInt Bool
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
hsein Char
side Char
eigsrc Char
initv Array ZeroInt Bool
select Array (ZeroInt, ZeroInt) (Complex Double)
h IOArray ZeroInt (Complex Double)
w IOArray (ZeroInt, ZeroInt) (Complex Double)
vl IOArray (ZeroInt, ZeroInt) (Complex Double)
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
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
h
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
w
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 == wDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 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 <- Array ZeroInt Bool
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, 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, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
hPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
wPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
w
Ptr (Complex Double)
vlPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
vrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> 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 (Complex Double)
hPtr Ptr CInt
ldhPtr Ptr (Complex Double)
wPtr Ptr (Complex Double)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Double)
vrPtr Ptr CInt
ldvrPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr 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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt (Complex Double), Int)
hseqr :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt (Complex Double), Int)
hseqr Char
job Char
compz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) (Complex Double)
h IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
w <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CChar
compzPtr <- Char -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr (Complex Double)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
h
Ptr CInt
ldhPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr (Complex Double)
wPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hseqr Ptr CChar
jobPtr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Double)
hPtr Ptr CInt
ldhPtr Ptr (Complex Double)
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
w
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
ilalc ::
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO CInt
ilalc :: Int -> Array (ZeroInt, ZeroInt) (Complex Double) -> IO CInt
ilalc Int
m Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO CInt (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> Ptr CInt -> IO CInt
FFI.ilalc Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr
ilalr ::
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO CInt
ilalr :: Int -> Array (ZeroInt, ZeroInt) (Complex Double) -> IO CInt
ilalr Int
m Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO CInt (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> Ptr CInt -> IO CInt
FFI.ilalr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr
imax1 ::
Array ZeroInt (Complex Double) ->
Int ->
IO CInt
imax1 :: Array ZeroInt (Complex Double) -> Int -> IO CInt
imax1 Array ZeroInt (Complex Double)
zx Int
incx = do
let zxDim0 :: Int
zxDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
zx
let n :: Int
n = Int
zxDim0
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 (Complex Double)
zxPtr <- Array ZeroInt (Complex Double)
-> FortranIO CInt (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
zx
Ptr CInt
incxPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
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 (Complex Double) -> Ptr CInt -> IO CInt
FFI.imax1 Ptr CInt
nPtr Ptr (Complex Double)
zxPtr Ptr CInt
incxPtr
labrd ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double))
labrd :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
labrd Int
m Int
nb IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
d <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
IOArray ZeroInt Double
e <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
IOArray ZeroInt (Complex Double)
tauq <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
IOArray ZeroInt (Complex Double)
taup <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
IOArray (ZeroInt, ZeroInt) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldx
IOArray (ZeroInt, ZeroInt) (Complex Double)
y <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldy
ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
tauqPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tauq
Ptr (Complex Double)
taupPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
taup
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr (Complex Double)
yPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
y
Ptr CInt
ldyPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldy
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.labrd Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nbPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
dPtr Ptr Double
ePtr Ptr (Complex Double)
tauqPtr Ptr (Complex Double)
taupPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr (Complex Double)
yPtr Ptr CInt
ldyPtr
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
d
IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
e
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tauq
IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
taup
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
y
lacgv ::
Int ->
IOArray ZeroInt (Complex Double) ->
Int ->
IO ()
lacgv :: Int -> IOArray ZeroInt (Complex Double) -> Int -> IO ()
lacgv Int
n IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
x
let _xSize :: Int
_xSize = Int
xDim0
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 (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
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 (Complex Double) -> Ptr CInt -> IO ()
FFI.lacgv Ptr CInt
nPtr Ptr (Complex Double)
xPtr Ptr CInt
incxPtr
lacn2 ::
IOArray ZeroInt (Complex Double) ->
Double ->
Int ->
IOArray ZeroInt CInt ->
IO (Array ZeroInt (Complex Double), Double, Int)
lacn2 :: IOArray ZeroInt (Complex Double)
-> Double
-> Int
-> IOArray ZeroInt CInt
-> IO (Array ZeroInt (Complex Double), Double, Int)
lacn2 IOArray ZeroInt (Complex Double)
x Double
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double)
v <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt (Complex Double), Double, Int)
IO
(Array ZeroInt (Complex Double), Double, Int)
-> IO (Array ZeroInt (Complex Double), Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Double, Int)
IO
(Array ZeroInt (Complex Double), Double, Int)
-> IO (Array ZeroInt (Complex Double), Double, Int))
-> ContT
(Array ZeroInt (Complex Double), Double, Int)
IO
(Array ZeroInt (Complex Double), Double, Int)
-> IO (Array ZeroInt (Complex Double), Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
vPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
v
Ptr (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
Ptr Double
estPtr <- Double
-> FortranIO
(Array ZeroInt (Complex Double), Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
est
Ptr CInt
kasePtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kase
Ptr CInt
isavePtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt (Complex Double), Double, 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 (Complex Double), Double, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt (Complex Double), Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt (Complex Double), Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt (Complex Double), Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lacn2 Ptr CInt
nPtr Ptr (Complex Double)
vPtr Ptr (Complex Double)
xPtr Ptr Double
estPtr Ptr CInt
kasePtr Ptr CInt
isavePtr
IO (Array ZeroInt (Complex Double), Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Double, Int)
IO
(Array ZeroInt (Complex Double), Double, Int)
forall a.
IO a -> ContT (Array ZeroInt (Complex Double), Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Double, Int)
IO
(Array ZeroInt (Complex Double), Double, Int))
-> IO (Array ZeroInt (Complex Double), Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Double, Int)
IO
(Array ZeroInt (Complex Double), Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Double -> Int -> (Array ZeroInt (Complex Double), Double, Int))
-> IO
(Array ZeroInt (Complex Double)
-> Double -> Int -> (Array ZeroInt (Complex Double), Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt (Complex Double)
-> Double -> Int -> (Array ZeroInt (Complex Double), Double, Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Double -> Int -> (Array ZeroInt (Complex Double), 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
v
IO (Double -> Int -> (Array ZeroInt (Complex Double), Double, Int))
-> IO Double
-> IO (Int -> (Array ZeroInt (Complex Double), 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
estPtr
IO (Int -> (Array ZeroInt (Complex Double), Double, Int))
-> IO Int -> IO (Array ZeroInt (Complex Double), 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
kasePtr)
lacon ::
IOArray ZeroInt (Complex Double) ->
Double ->
Int ->
IO (Array ZeroInt (Complex Double), Double, Int)
lacon :: IOArray ZeroInt (Complex Double)
-> Double
-> Int
-> IO (Array ZeroInt (Complex Double), Double, Int)
lacon IOArray ZeroInt (Complex Double)
x Double
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
x
let n :: Int
n = Int
xDim0
IOArray ZeroInt (Complex Double)
v <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt (Complex Double), Double, Int)
IO
(Array ZeroInt (Complex Double), Double, Int)
-> IO (Array ZeroInt (Complex Double), Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Double, Int)
IO
(Array ZeroInt (Complex Double), Double, Int)
-> IO (Array ZeroInt (Complex Double), Double, Int))
-> ContT
(Array ZeroInt (Complex Double), Double, Int)
IO
(Array ZeroInt (Complex Double), Double, Int)
-> IO (Array ZeroInt (Complex Double), Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
vPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
v
Ptr (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
Ptr Double
estPtr <- Double
-> FortranIO
(Array ZeroInt (Complex Double), Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
est
Ptr CInt
kasePtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kase
IO () -> ContT (Array ZeroInt (Complex Double), Double, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt (Complex Double), Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt (Complex Double), Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt (Complex Double), Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lacon Ptr CInt
nPtr Ptr (Complex Double)
vPtr Ptr (Complex Double)
xPtr Ptr Double
estPtr Ptr CInt
kasePtr
IO (Array ZeroInt (Complex Double), Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Double, Int)
IO
(Array ZeroInt (Complex Double), Double, Int)
forall a.
IO a -> ContT (Array ZeroInt (Complex Double), Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Double, Int)
IO
(Array ZeroInt (Complex Double), Double, Int))
-> IO (Array ZeroInt (Complex Double), Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Double, Int)
IO
(Array ZeroInt (Complex Double), Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Double -> Int -> (Array ZeroInt (Complex Double), Double, Int))
-> IO
(Array ZeroInt (Complex Double)
-> Double -> Int -> (Array ZeroInt (Complex Double), Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt (Complex Double)
-> Double -> Int -> (Array ZeroInt (Complex Double), Double, Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Double -> Int -> (Array ZeroInt (Complex Double), 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
v
IO (Double -> Int -> (Array ZeroInt (Complex Double), Double, Int))
-> IO Double
-> IO (Int -> (Array ZeroInt (Complex Double), 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
estPtr
IO (Int -> (Array ZeroInt (Complex Double), Double, Int))
-> IO Int -> IO (Array ZeroInt (Complex Double), 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
kasePtr)
lacp2 ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) Double ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double))
lacp2 :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
lacp2 Char
uplo Int
m Array (ZeroInt, ZeroInt) Double
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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray (ZeroInt, ZeroInt) (Complex Double)
b <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldb
ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double)))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
mPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
a
Ptr CInt
ldaPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.lacp2 Ptr CChar
uploPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
lacpy ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double))
lacpy :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
lacpy Char
uplo Int
m Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray (ZeroInt, ZeroInt) (Complex Double)
b <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldb
ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double)))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
mPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.lacpy Ptr CChar
uploPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
lacrm ::
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) Double ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double))
lacrm :: Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
lacrm Int
m Array (ZeroInt, ZeroInt) (Complex Double)
a Array (ZeroInt, ZeroInt) Double
b Int
ldc = 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
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
"lacrm: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
IOArray (ZeroInt, ZeroInt) (Complex Double)
c <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldc
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double)))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
bPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
b
Ptr CInt
ldbPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> IO ()
FFI.lacrm Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr Double
rworkPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
lacrt ::
IOArray ZeroInt (Complex Double) ->
Int ->
IOArray ZeroInt (Complex Double) ->
Int ->
Complex Double ->
Complex Double ->
IO ()
lacrt :: IOArray ZeroInt (Complex Double)
-> Int
-> IOArray ZeroInt (Complex Double)
-> Int
-> Complex Double
-> Complex Double
-> IO ()
lacrt IOArray ZeroInt (Complex Double)
cx Int
incx IOArray ZeroInt (Complex Double)
cy Int
incy Complex Double
c Complex Double
s = do
let cxDim0 :: Int
cxDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
cx
let cyDim0 :: Int
cyDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
cy
let n :: Int
n = Int
cxDim0
String -> Bool -> IO ()
Call.assert String
"lacrt: n == cyDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cyDim0)
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 (Complex Double)
cxPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
cx
Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr (Complex Double)
cyPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
cy
Ptr CInt
incyPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
Ptr (Complex Double)
cPtr <- Complex Double -> FortranIO () (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
c
Ptr (Complex Double)
sPtr <- Complex Double -> FortranIO () (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
s
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> IO ()
FFI.lacrt Ptr CInt
nPtr Ptr (Complex Double)
cxPtr Ptr CInt
incxPtr Ptr (Complex Double)
cyPtr Ptr CInt
incyPtr Ptr (Complex Double)
cPtr Ptr (Complex Double)
sPtr
laed0 ::
Int ->
IOArray ZeroInt Double ->
IOArray ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)
laed0 :: Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
laed0 Int
qsiz IOArray ZeroInt Double
d IOArray ZeroInt Double
e IOArray (ZeroInt, ZeroInt) (Complex Double)
q Int
ldqs Int
rworkSize 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
qstore <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldqs
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
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) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
qsizPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
qsiz
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr (Complex Double)
qstorePtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
qstore
Ptr CInt
ldqsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldqs
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed0 Ptr CInt
qsizPtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr (Complex Double)
qstorePtr Ptr CInt
ldqsPtr Ptr Double
rworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
qstore
IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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)
laed7 ::
Int ->
Int ->
Int ->
Int ->
Int ->
IOArray ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Double ->
IOArray ZeroInt Double ->
IOArray ZeroInt CInt ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) CInt ->
Array (ZeroInt,ZeroInt) Double ->
Int ->
IO (Array ZeroInt CInt, Int)
laed7 :: Int
-> Int
-> Int
-> Int
-> Int
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt CInt, Int)
laed7 Int
cutpnt Int
qsiz Int
tlvls Int
curlvl Int
curpbm IOArray ZeroInt Double
d IOArray (ZeroInt, ZeroInt) (Complex Double)
q Double
rho IOArray ZeroInt Double
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) Double
givnum Int
rworkSize = 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
qsizInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
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
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
cutpntPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
cutpnt
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 Double
dPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Double
rhoPtr <- Double -> FortranIO (Array ZeroInt CInt, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rho
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 Double
qstorePtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
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 Double
givnumPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
givnum
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
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 Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed7 Ptr CInt
nPtr Ptr CInt
cutpntPtr Ptr CInt
qsizPtr Ptr CInt
tlvlsPtr Ptr CInt
curlvlPtr Ptr CInt
curpbmPtr Ptr Double
dPtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr Double
rhoPtr Ptr CInt
indxqPtr Ptr Double
qstorePtr Ptr CInt
qptrPtr Ptr CInt
prmptrPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr Double
givnumPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr 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 ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt Double ->
Double ->
Int ->
Array ZeroInt Double ->
Int ->
Array ZeroInt CInt ->
IO (Int, Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Double, Int)
laed8 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt Double
-> Double
-> Int
-> Array ZeroInt Double
-> Int
-> Array ZeroInt CInt
-> IO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
laed8 Int
qsiz IOArray (ZeroInt, ZeroInt) (Complex Double)
q IOArray ZeroInt Double
d Double
rho Int
cutpnt Array ZeroInt Double
z Int
ldq2 Array ZeroInt CInt
indxq = do
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
q
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
z
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 n :: Int
n = Int
qDim0
let ldq :: Int
ldq = Int
qDim1
String -> Bool -> IO ()
Call.assert String
"laed8: n == dDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
String -> Bool -> IO ()
Call.assert String
"laed8: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
String -> Bool -> IO ()
Call.assert String
"laed8: n == indxqDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
indxqDim0)
IOArray ZeroInt Double
dlamda <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
q2 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq2
IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
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
indx <- 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
n Int
2
IOArray (ZeroInt, ZeroInt) Double
givnum <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
2
ContT
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
IO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
-> IO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
IO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
-> IO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> ContT
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
IO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
-> IO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
kPtr <- FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
qsizPtr <- Int
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
qsiz
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
rhoPtr <- Double
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rho
Ptr CInt
cutpntPtr <- Int
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
cutpnt
Ptr Double
zPtr <- Array ZeroInt Double
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
z
Ptr Double
dlamdaPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
dlamda
Ptr (Complex Double)
q2Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q2
Ptr CInt
ldq2Ptr <- Int
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq2
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr CInt
indxpPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
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, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indx
Ptr CInt
indxqPtr <- Array ZeroInt CInt
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
indxq
Ptr CInt
permPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
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, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
givcolPtr <- IOArray (ZeroInt, ZeroInt) CInt
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) CInt
givcol
Ptr Double
givnumPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, 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
givnum
Ptr CInt
infoPtr <- FortranIO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
IO
()
forall a.
IO a
-> ContT
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
IO
())
-> IO ()
-> ContT
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.laed8 Ptr CInt
kPtr Ptr CInt
nPtr Ptr CInt
qsizPtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr Double
dPtr Ptr Double
rhoPtr Ptr CInt
cutpntPtr Ptr Double
zPtr Ptr Double
dlamdaPtr Ptr (Complex Double)
q2Ptr Ptr CInt
ldq2Ptr Ptr Double
wPtr Ptr CInt
indxpPtr Ptr CInt
indxPtr Ptr CInt
indxqPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr Double
givnumPtr Ptr CInt
infoPtr
IO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
-> ContT
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
IO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
forall a.
IO a
-> ContT
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
-> ContT
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
IO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> IO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
-> ContT
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
IO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Double
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> IO
(Int
-> Double
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,)
IO
(Int
-> Double
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> IO Int
-> IO
(Double
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, 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
kPtr)
IO
(Double
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rhoPtr
IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
dlamda
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
q2
IO
(Array ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, 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 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
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, 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 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
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, 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 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) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, 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
givptrPtr)
IO
(Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> IO (Array (ZeroInt, ZeroInt) CInt)
-> IO
(Array (ZeroInt, ZeroInt) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, 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) 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) Double
-> Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
(Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, 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
givnum
IO
(Int
-> (Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
Int))
-> IO Int
-> IO
(Int, Double, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt Double,
Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
Array (ZeroInt, ZeroInt) CInt, 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)
laein ::
Bool ->
Bool ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Complex Double ->
IOArray ZeroInt (Complex Double) ->
Int ->
Double ->
Double ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)
laein :: Bool
-> Bool
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Complex Double
-> IOArray ZeroInt (Complex Double)
-> Int
-> Double
-> Double
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
laein Bool
rightv Bool
noinit Array (ZeroInt, ZeroInt) (Complex Double)
h Complex Double
w IOArray ZeroInt (Complex Double)
v Int
ldb Double
eps3 Double
smlnum = 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
h
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
$ IOArray ZeroInt (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
v
let n :: Int
n = Int
hDim0
let ldh :: Int
ldh = Int
hDim1
String -> Bool -> IO ()
Call.assert String
"laein: n == vDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vDim0)
IOArray (ZeroInt, ZeroInt) (Complex Double)
b <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldb
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
rightvPtr <- Bool
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
rightv
Ptr Bool
noinitPtr <- Bool
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
noinit
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
hPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
h
Ptr CInt
ldhPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr (Complex Double)
wPtr <- Complex Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
w
Ptr (Complex Double)
vPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
v
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr Double
eps3Ptr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
eps3
Ptr Double
smlnumPtr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
smlnum
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.laein Ptr Bool
rightvPtr Ptr Bool
noinitPtr Ptr CInt
nPtr Ptr (Complex Double)
hPtr Ptr CInt
ldhPtr Ptr (Complex Double)
wPtr Ptr (Complex Double)
vPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr Double
rworkPtr Ptr Double
eps3Ptr Ptr Double
smlnumPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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)
laesy ::
Complex Double ->
Complex Double ->
Complex Double ->
IO (Complex Double, Complex Double, Complex Double, Complex Double, Complex Double)
laesy :: Complex Double
-> Complex Double
-> Complex Double
-> IO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
laesy Complex Double
a Complex Double
b Complex Double
c = do
ContT
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
IO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
-> IO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
IO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
-> IO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double))
-> ContT
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
IO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
-> IO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
forall a b. (a -> b) -> a -> b
$ do
Ptr (Complex Double)
aPtr <- Complex Double
-> FortranIO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
(Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
a
Ptr (Complex Double)
bPtr <- Complex Double
-> FortranIO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
(Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
b
Ptr (Complex Double)
cPtr <- Complex Double
-> FortranIO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
(Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
c
Ptr (Complex Double)
rt1Ptr <- FortranIO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
(Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
rt2Ptr <- FortranIO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
(Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
evscalPtr <- FortranIO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
(Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
cs1Ptr <- FortranIO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
(Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
sn1Ptr <- FortranIO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
(Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
IO
()
forall a.
IO a
-> ContT
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
IO
())
-> IO ()
-> ContT
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> IO ()
FFI.laesy Ptr (Complex Double)
aPtr Ptr (Complex Double)
bPtr Ptr (Complex Double)
cPtr Ptr (Complex Double)
rt1Ptr Ptr (Complex Double)
rt2Ptr Ptr (Complex Double)
evscalPtr Ptr (Complex Double)
cs1Ptr Ptr (Complex Double)
sn1Ptr
IO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
-> ContT
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
IO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
forall a.
IO a
-> ContT
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
-> ContT
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
IO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double))
-> IO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
-> ContT
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
IO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
forall a b. (a -> b) -> a -> b
$ (Complex Double
-> Complex Double
-> Complex Double
-> Complex Double
-> Complex Double
-> (Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double))
-> IO
(Complex Double
-> Complex Double
-> Complex Double
-> Complex Double
-> Complex Double
-> (Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Complex Double
-> Complex Double
-> Complex Double
-> Complex Double
-> Complex Double
-> (Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double))
-> IO (Complex Double)
-> IO
(Complex Double
-> Complex Double
-> Complex Double
-> Complex Double
-> (Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
rt1Ptr
IO
(Complex Double
-> Complex Double
-> Complex Double
-> Complex Double
-> (Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double))
-> IO (Complex Double)
-> IO
(Complex Double
-> Complex Double
-> Complex Double
-> (Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
rt2Ptr
IO
(Complex Double
-> Complex Double
-> Complex Double
-> (Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double))
-> IO (Complex Double)
-> IO
(Complex Double
-> Complex Double
-> (Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
evscalPtr
IO
(Complex Double
-> Complex Double
-> (Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double))
-> IO (Complex Double)
-> IO
(Complex Double
-> (Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
cs1Ptr
IO
(Complex Double
-> (Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double))
-> IO (Complex Double)
-> IO
(Complex Double, Complex Double, Complex Double, Complex Double,
Complex Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
sn1Ptr
laev2 ::
Complex Double ->
Complex Double ->
Complex Double ->
IO (Double, Double, Double, Complex Double)
laev2 :: Complex Double
-> Complex Double
-> Complex Double
-> IO (Double, Double, Double, Complex Double)
laev2 Complex Double
a Complex Double
b Complex Double
c = do
ContT
(Double, Double, Double, Complex Double)
IO
(Double, Double, Double, Complex Double)
-> IO (Double, Double, Double, Complex Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Double, Double, Double, Complex Double)
IO
(Double, Double, Double, Complex Double)
-> IO (Double, Double, Double, Complex Double))
-> ContT
(Double, Double, Double, Complex Double)
IO
(Double, Double, Double, Complex Double)
-> IO (Double, Double, Double, Complex Double)
forall a b. (a -> b) -> a -> b
$ do
Ptr (Complex Double)
aPtr <- Complex Double
-> FortranIO
(Double, Double, Double, Complex Double) (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
a
Ptr (Complex Double)
bPtr <- Complex Double
-> FortranIO
(Double, Double, Double, Complex Double) (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
b
Ptr (Complex Double)
cPtr <- Complex Double
-> FortranIO
(Double, Double, Double, Complex Double) (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
c
Ptr Double
rt1Ptr <- FortranIO (Double, Double, Double, Complex Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
rt2Ptr <- FortranIO (Double, Double, Double, Complex Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
cs1Ptr <- FortranIO (Double, Double, Double, Complex Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
sn1Ptr <- FortranIO
(Double, Double, Double, Complex Double) (Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Double, Double, Complex Double) IO ()
forall a.
IO a -> ContT (Double, Double, Double, Complex Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Double, Double, Complex Double) IO ())
-> IO () -> ContT (Double, Double, Double, Complex Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> IO ()
FFI.laev2 Ptr (Complex Double)
aPtr Ptr (Complex Double)
bPtr Ptr (Complex Double)
cPtr Ptr Double
rt1Ptr Ptr Double
rt2Ptr Ptr Double
cs1Ptr Ptr (Complex Double)
sn1Ptr
IO (Double, Double, Double, Complex Double)
-> ContT
(Double, Double, Double, Complex Double)
IO
(Double, Double, Double, Complex Double)
forall a.
IO a -> ContT (Double, Double, Double, Complex Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double, Double, Complex Double)
-> ContT
(Double, Double, Double, Complex Double)
IO
(Double, Double, Double, Complex Double))
-> IO (Double, Double, Double, Complex Double)
-> ContT
(Double, Double, Double, Complex Double)
IO
(Double, Double, Double, Complex Double)
forall a b. (a -> b) -> a -> b
$ (Double
-> Double
-> Double
-> Complex Double
-> (Double, Double, Double, Complex Double))
-> IO
(Double
-> Double
-> Double
-> Complex Double
-> (Double, Double, Double, Complex Double))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Double
-> Double
-> Double
-> Complex Double
-> (Double, Double, Double, Complex Double))
-> IO Double
-> IO
(Double
-> Double
-> Complex Double
-> (Double, Double, Double, Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rt1Ptr
IO
(Double
-> Double
-> Complex Double
-> (Double, Double, Double, Complex Double))
-> IO Double
-> IO
(Double
-> Complex Double -> (Double, Double, Double, Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rt2Ptr
IO
(Double
-> Complex Double -> (Double, Double, Double, Complex Double))
-> IO Double
-> IO (Complex Double -> (Double, Double, Double, Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
cs1Ptr
IO (Complex Double -> (Double, Double, Double, Complex Double))
-> IO (Complex Double)
-> IO (Double, Double, Double, Complex Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
sn1Ptr
lag2c ::
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)
lag2c :: Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
lag2c Int
m Array (ZeroInt, ZeroInt) (Complex Double)
a Int
ldsa = 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray (ZeroInt, ZeroInt) (Complex Float)
sa <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldsa
ContT
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Float)
saPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
(Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
sa
Ptr CInt
ldsaPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldsa
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lag2c Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
saPtr Ptr CInt
ldsaPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Float)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) (Complex Float)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall 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) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
sa
IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a 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 ->
Double ->
Complex Double ->
Double ->
Double ->
Complex Double ->
Double ->
IO (Double, Complex Double, Double, Complex Double, Double, Complex Double)
lags2 :: Bool
-> Double
-> Complex Double
-> Double
-> Double
-> Complex Double
-> Double
-> IO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
lags2 Bool
upper Double
a1 Complex Double
a2 Double
a3 Double
b1 Complex Double
b2 Double
b3 = do
ContT
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
IO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
-> IO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
IO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
-> IO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double))
-> ContT
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
IO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
-> IO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
upperPtr <- Bool
-> FortranIO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
upper
Ptr Double
a1Ptr <- Double
-> FortranIO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
a1
Ptr (Complex Double)
a2Ptr <- Complex Double
-> FortranIO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
(Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
a2
Ptr Double
a3Ptr <- Double
-> FortranIO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
a3
Ptr Double
b1Ptr <- Double
-> FortranIO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
b1
Ptr (Complex Double)
b2Ptr <- Complex Double
-> FortranIO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
(Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
b2
Ptr Double
b3Ptr <- Double
-> FortranIO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
b3
Ptr Double
csuPtr <- FortranIO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
snuPtr <- FortranIO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
(Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
csvPtr <- FortranIO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
snvPtr <- FortranIO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
(Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
csqPtr <- FortranIO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
snqPtr <- FortranIO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
(Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
IO
()
forall a.
IO a
-> ContT
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
IO
())
-> IO ()
-> ContT
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr (Complex Double)
-> IO ()
FFI.lags2 Ptr Bool
upperPtr Ptr Double
a1Ptr Ptr (Complex Double)
a2Ptr Ptr Double
a3Ptr Ptr Double
b1Ptr Ptr (Complex Double)
b2Ptr Ptr Double
b3Ptr Ptr Double
csuPtr Ptr (Complex Double)
snuPtr Ptr Double
csvPtr Ptr (Complex Double)
snvPtr Ptr Double
csqPtr Ptr (Complex Double)
snqPtr
IO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
-> ContT
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
IO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
forall a.
IO a
-> ContT
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
-> ContT
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
IO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double))
-> IO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
-> ContT
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
IO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
forall a b. (a -> b) -> a -> b
$ (Double
-> Complex Double
-> Double
-> Complex Double
-> Double
-> Complex Double
-> (Double, Complex Double, Double, Complex Double, Double,
Complex Double))
-> IO
(Double
-> Complex Double
-> Double
-> Complex Double
-> Double
-> Complex Double
-> (Double, Complex Double, Double, Complex Double, Double,
Complex Double))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Double
-> Complex Double
-> Double
-> Complex Double
-> Double
-> Complex Double
-> (Double, Complex Double, Double, Complex Double, Double,
Complex Double))
-> IO Double
-> IO
(Complex Double
-> Double
-> Complex Double
-> Double
-> Complex Double
-> (Double, Complex Double, Double, Complex Double, Double,
Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
csuPtr
IO
(Complex Double
-> Double
-> Complex Double
-> Double
-> Complex Double
-> (Double, Complex Double, Double, Complex Double, Double,
Complex Double))
-> IO (Complex Double)
-> IO
(Double
-> Complex Double
-> Double
-> Complex Double
-> (Double, Complex Double, Double, Complex Double, Double,
Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
snuPtr
IO
(Double
-> Complex Double
-> Double
-> Complex Double
-> (Double, Complex Double, Double, Complex Double, Double,
Complex Double))
-> IO Double
-> IO
(Complex Double
-> Double
-> Complex Double
-> (Double, Complex Double, Double, Complex Double, Double,
Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
csvPtr
IO
(Complex Double
-> Double
-> Complex Double
-> (Double, Complex Double, Double, Complex Double, Double,
Complex Double))
-> IO (Complex Double)
-> IO
(Double
-> Complex Double
-> (Double, Complex Double, Double, Complex Double, Double,
Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
snvPtr
IO
(Double
-> Complex Double
-> (Double, Complex Double, Double, Complex Double, Double,
Complex Double))
-> IO Double
-> IO
(Complex Double
-> (Double, Complex Double, Double, Complex Double, Double,
Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
csqPtr
IO
(Complex Double
-> (Double, Complex Double, Double, Complex Double, Double,
Complex Double))
-> IO (Complex Double)
-> IO
(Double, Complex Double, Double, Complex Double, Double,
Complex Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
snqPtr
lagtm ::
Char ->
Double ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO ()
lagtm :: Char
-> Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO ()
lagtm Char
trans Double
alpha Array ZeroInt (Complex Double)
dl Array ZeroInt (Complex Double)
d Array ZeroInt (Complex Double)
du Array (ZeroInt, ZeroInt) (Complex Double)
x Double
beta IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
alphaPtr <- Double -> FortranIO () (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
alpha
Ptr (Complex Double)
dlPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
dl
Ptr (Complex Double)
dPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
d
Ptr (Complex Double)
duPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
du
Ptr (Complex Double)
xPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
betaPtr <- Double -> FortranIO () (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
beta
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.lagtm Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
alphaPtr Ptr (Complex Double)
dlPtr Ptr (Complex Double)
dPtr Ptr (Complex Double)
duPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
betaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr
lahef ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) (Complex Double), Int)
lahef :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
lahef Char
uplo Int
nb IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
w <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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) (Complex Double), Int)
IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), 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) (Complex Double), 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) (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr (Complex Double)
wPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
w
Ptr CInt
ldwPtr <- Int
-> FortranIO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lahef Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nbPtr Ptr CInt
kbPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
wPtr Ptr CInt
ldwPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Int
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Int
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex 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
kbPtr)
IO
(Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex 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 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) (Complex Double)
-> Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
w
IO
(Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex 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)
lahqr ::
Bool ->
Bool ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt (Complex Double), Int)
lahqr :: Bool
-> Bool
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt (Complex Double), Int)
lahqr Bool
wantt Bool
wantz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) (Complex Double)
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
w <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wanttPtr <- Bool -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
Ptr Bool
wantzPtr <- Bool -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr (Complex Double)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
h
Ptr CInt
ldhPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr (Complex Double)
wPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
w
Ptr CInt
ilozPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
Ptr CInt
ihizPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lahqr Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Double)
hPtr Ptr CInt
ldhPtr Ptr (Complex Double)
wPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
w
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
lahr2 ::
Int ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO (Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double))
lahr2 :: Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
lahr2 Int
n Int
k Int
nb IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
IOArray (ZeroInt, ZeroInt) (Complex Double)
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldt
IOArray (ZeroInt, ZeroInt) (Complex Double)
y <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldy
ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr CInt
nbPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
t
Ptr CInt
ldtPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr (Complex Double)
yPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
y
Ptr CInt
ldyPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldy
IO ()
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
())
-> IO ()
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.lahr2 Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
nbPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
tPtr Ptr CInt
ldtPtr Ptr (Complex Double)
yPtr Ptr CInt
ldyPtr
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
t
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
y
laic1 ::
Int ->
Array ZeroInt (Complex Double) ->
Double ->
Array ZeroInt (Complex Double) ->
Complex Double ->
IO (Double, Complex Double, Complex Double)
laic1 :: Int
-> Array ZeroInt (Complex Double)
-> Double
-> Array ZeroInt (Complex Double)
-> Complex Double
-> IO (Double, Complex Double, Complex Double)
laic1 Int
job Array ZeroInt (Complex Double)
x Double
sest Array ZeroInt (Complex Double)
w Complex Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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
(Double, Complex Double, Complex Double)
IO
(Double, Complex Double, Complex Double)
-> IO (Double, Complex Double, Complex Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Double, Complex Double, Complex Double)
IO
(Double, Complex Double, Complex Double)
-> IO (Double, Complex Double, Complex Double))
-> ContT
(Double, Complex Double, Complex Double)
IO
(Double, Complex Double, Complex Double)
-> IO (Double, Complex Double, Complex Double)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
jobPtr <- Int
-> FortranIO (Double, Complex Double, Complex Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
job
Ptr CInt
jPtr <- Int
-> FortranIO (Double, Complex Double, Complex Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
j
Ptr (Complex Double)
xPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Double, Complex Double, Complex Double) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
x
Ptr Double
sestPtr <- Double
-> FortranIO (Double, Complex Double, Complex Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
sest
Ptr (Complex Double)
wPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Double, Complex Double, Complex Double) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
w
Ptr (Complex Double)
gammaPtr <- Complex Double
-> FortranIO
(Double, Complex Double, Complex Double) (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
gamma
Ptr Double
sestprPtr <- FortranIO (Double, Complex Double, Complex Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
sPtr <- FortranIO
(Double, Complex Double, Complex Double) (Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
cPtr <- FortranIO
(Double, Complex Double, Complex Double) (Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Complex Double, Complex Double) IO ()
forall a.
IO a -> ContT (Double, Complex Double, Complex Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Complex Double, Complex Double) IO ())
-> IO () -> ContT (Double, Complex Double, Complex Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> IO ()
FFI.laic1 Ptr CInt
jobPtr Ptr CInt
jPtr Ptr (Complex Double)
xPtr Ptr Double
sestPtr Ptr (Complex Double)
wPtr Ptr (Complex Double)
gammaPtr Ptr Double
sestprPtr Ptr (Complex Double)
sPtr Ptr (Complex Double)
cPtr
IO (Double, Complex Double, Complex Double)
-> ContT
(Double, Complex Double, Complex Double)
IO
(Double, Complex Double, Complex Double)
forall a.
IO a -> ContT (Double, Complex Double, Complex Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Complex Double, Complex Double)
-> ContT
(Double, Complex Double, Complex Double)
IO
(Double, Complex Double, Complex Double))
-> IO (Double, Complex Double, Complex Double)
-> ContT
(Double, Complex Double, Complex Double)
IO
(Double, Complex Double, Complex Double)
forall a b. (a -> b) -> a -> b
$ (Double
-> Complex Double
-> Complex Double
-> (Double, Complex Double, Complex Double))
-> IO
(Double
-> Complex Double
-> Complex Double
-> (Double, Complex Double, Complex Double))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Double
-> Complex Double
-> Complex Double
-> (Double, Complex Double, Complex Double))
-> IO Double
-> IO
(Complex Double
-> Complex Double -> (Double, Complex Double, Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
sestprPtr
IO
(Complex Double
-> Complex Double -> (Double, Complex Double, Complex Double))
-> IO (Complex Double)
-> IO (Complex Double -> (Double, Complex Double, Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
sPtr
IO (Complex Double -> (Double, Complex Double, Complex Double))
-> IO (Complex Double)
-> IO (Double, Complex Double, Complex Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
cPtr
lals0 ::
Int ->
Int ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Array ZeroInt CInt ->
Int ->
Array (ZeroInt,ZeroInt) CInt ->
Array (ZeroInt,ZeroInt) Double ->
Array (ZeroInt,ZeroInt) Double ->
Array ZeroInt Double ->
Array (ZeroInt,ZeroInt) Double ->
Array ZeroInt Double ->
Double ->
Double ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)
lals0 :: Int
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Double
-> Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
lals0 Int
icompq Int
nl Int
nr Int
sqre IOArray (ZeroInt, ZeroInt) (Complex Double)
b Int
ldbx Array ZeroInt CInt
perm Int
givptr Array (ZeroInt, ZeroInt) CInt
givcol Array (ZeroInt, ZeroInt) Double
givnum Array (ZeroInt, ZeroInt) Double
poles Array ZeroInt Double
difl Array (ZeroInt, ZeroInt) Double
difr Array ZeroInt Double
z Double
c Double
s Int
rworkSize = 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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) (Complex Double)
bx <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldbx
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
icompqPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
Ptr CInt
nlPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nl
Ptr CInt
nrPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nr
Ptr CInt
sqrePtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
bxPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
bx
Ptr CInt
ldbxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbx
Ptr CInt
permPtr <- Array ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), 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) (Complex Double), 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) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgcol
Ptr Double
givnumPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
givnum
Ptr CInt
ldgnumPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgnum
Ptr Double
polesPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
poles
Ptr Double
diflPtr <- Array ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
difl
Ptr Double
difrPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
difr
Ptr Double
zPtr <- Array ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
z
Ptr CInt
kPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr Double
cPtr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
c
Ptr Double
sPtr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
s
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lals0 Ptr CInt
icompqPtr Ptr CInt
nlPtr Ptr CInt
nrPtr Ptr CInt
sqrePtr Ptr CInt
nrhsPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
bxPtr Ptr CInt
ldbxPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr CInt
ldgcolPtr Ptr Double
givnumPtr Ptr CInt
ldgnumPtr Ptr Double
polesPtr Ptr Double
diflPtr Ptr Double
difrPtr Ptr Double
zPtr Ptr CInt
kPtr Ptr Double
cPtr Ptr Double
sPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
bx
IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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)
lalsa ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Array (ZeroInt,ZeroInt) Double ->
Array (ZeroInt,ZeroInt) Double ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) Double ->
Array (ZeroInt,ZeroInt) Double ->
Array (ZeroInt,ZeroInt) Double ->
Array (ZeroInt,ZeroInt) Double ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) CInt ->
Array (ZeroInt,ZeroInt) CInt ->
Array (ZeroInt,ZeroInt) Double ->
Array ZeroInt Double ->
Array ZeroInt Double ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)
lalsa :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
lalsa Int
icompq IOArray (ZeroInt, ZeroInt) (Complex Double)
b Int
ldbx Array (ZeroInt, ZeroInt) Double
u Array (ZeroInt, ZeroInt) Double
vt Array ZeroInt CInt
k Array (ZeroInt, ZeroInt) Double
difl Array (ZeroInt, ZeroInt) Double
difr Array (ZeroInt, ZeroInt) Double
z Array (ZeroInt, ZeroInt) Double
poles Array ZeroInt CInt
givptr Array (ZeroInt, ZeroInt) CInt
givcol Array (ZeroInt, ZeroInt) CInt
perm Array (ZeroInt, ZeroInt) Double
givnum Array ZeroInt Double
c Array ZeroInt Double
s Int
rworkSize = 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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) (Complex Double)
bx <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldbx
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
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) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
icompqPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
Ptr CInt
smlsizPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
smlsiz
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
bxPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
bx
Ptr CInt
ldbxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbx
Ptr Double
uPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr Double
vtPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
vt
Ptr CInt
kPtr <- Array ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
k
Ptr Double
diflPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
difl
Ptr Double
difrPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
difr
Ptr Double
zPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
z
Ptr Double
polesPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
poles
Ptr CInt
givptrPtr <- Array ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), 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) (Complex Double), 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) (Complex Double), Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) CInt
perm
Ptr Double
givnumPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
givnum
Ptr Double
cPtr <- Array ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
c
Ptr Double
sPtr <- Array ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
s
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lalsa Ptr CInt
icompqPtr Ptr CInt
smlsizPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
bxPtr Ptr CInt
ldbxPtr Ptr Double
uPtr Ptr CInt
lduPtr Ptr Double
vtPtr Ptr CInt
kPtr Ptr Double
diflPtr Ptr Double
difrPtr Ptr Double
zPtr Ptr Double
polesPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr CInt
ldgcolPtr Ptr CInt
permPtr Ptr Double
givnumPtr Ptr Double
cPtr Ptr Double
sPtr Ptr Double
rworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
bx
IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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)
lalsd ::
Char ->
Int ->
IOArray ZeroInt Double ->
IOArray ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Double ->
Int ->
Int ->
IO (Int, Int)
lalsd :: Char
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Int
-> Int
-> IO (Int, Int)
lalsd Char
uplo Int
smlsiz IOArray ZeroInt Double
d IOArray ZeroInt Double
e IOArray (ZeroInt, ZeroInt) (Complex Double)
b Double
rcond Int
rworkSize 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nrhs)
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
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 Double
dPtr <- IOArray ZeroInt Double -> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double -> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Double
rcondPtr <- Double -> FortranIO (Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rcond
Ptr CInt
rankPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
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 Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lalsd Ptr CChar
uploPtr Ptr CInt
smlsizPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dPtr Ptr Double
ePtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr Double
rcondPtr Ptr CInt
rankPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr 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)
langb ::
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO Double
langb :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Double
langb Char
norm Int
kl Int
ku Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
klPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
Ptr CInt
kuPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
Ptr (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> IO Double
FFI.langb Ptr CChar
normPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
workPtr
lange ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO Double
lange :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Double
lange Char
norm Int
m Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
mPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> IO Double
FFI.lange Ptr CChar
normPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
workPtr
langt ::
Char ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
IO Double
langt :: Char
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> IO Double
langt Char
norm Array ZeroInt (Complex Double)
dl Array ZeroInt (Complex Double)
d Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
dlPtr <- Array ZeroInt (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
dl
Ptr (Complex Double)
dPtr <- Array ZeroInt (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
d
Ptr (Complex Double)
duPtr <- Array ZeroInt (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
du
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> IO Double
FFI.langt Ptr CChar
normPtr Ptr CInt
nPtr Ptr (Complex Double)
dlPtr Ptr (Complex Double)
dPtr Ptr (Complex Double)
duPtr
lanhb ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO Double
lanhb :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Double
lanhb Char
norm Char
uplo Int
k Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> IO Double
FFI.lanhb Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
workPtr
lanhe ::
Char ->
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO Double
lanhe :: Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Double
lanhe Char
norm Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> IO Double
FFI.lanhe Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
workPtr
lanhf ::
Char ->
Char ->
Char ->
Int ->
Array ZeroInt (Complex Double) ->
Int ->
IO Double
lanhf :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt (Complex Double)
-> Int
-> IO Double
lanhf Char
norm Char
transr Char
uplo Int
n Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
a
String -> Bool -> IO ()
Call.assert String
"lanhf: 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
transrPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array ZeroInt (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
a
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> IO Double
FFI.lanhf Ptr CChar
normPtr Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr Double
workPtr
lanhp ::
Char ->
Char ->
Int ->
Array ZeroInt (Complex Double) ->
Int ->
IO Double
lanhp :: Char
-> Char
-> Int
-> Array ZeroInt (Complex Double)
-> Int
-> IO Double
lanhp Char
norm Char
uplo Int
n Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
ap
String -> Bool -> IO ()
Call.assert String
"lanhp: 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> IO Double
FFI.lanhp Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr Double
workPtr
lanhs ::
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO Double
lanhs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double) -> Int -> IO Double
lanhs Char
norm Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> IO Double
FFI.lanhs Ptr CChar
normPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
workPtr
lanht ::
Char ->
Array ZeroInt Double ->
Array ZeroInt (Complex Double) ->
IO Double
lanht :: Char
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> IO Double
lanht Char
norm Array ZeroInt Double
d Array ZeroInt (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
e
let n :: Int
n = Int
dDim0
String -> Bool -> IO ()
Call.assert String
"lanht: 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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Double
dPtr <- Array ZeroInt Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
d
Ptr (Complex Double)
ePtr <- Array ZeroInt (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
e
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt -> Ptr Double -> Ptr (Complex Double) -> IO Double
FFI.lanht Ptr CChar
normPtr Ptr CInt
nPtr Ptr Double
dPtr Ptr (Complex Double)
ePtr
lansb ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO Double
lansb :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Double
lansb Char
norm Char
uplo Int
k Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> IO Double
FFI.lansb Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
workPtr
lansp ::
Char ->
Char ->
Int ->
Array ZeroInt (Complex Double) ->
Int ->
IO Double
lansp :: Char
-> Char
-> Int
-> Array ZeroInt (Complex Double)
-> Int
-> IO Double
lansp Char
norm Char
uplo Int
n Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> IO Double
FFI.lansp Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr Double
workPtr
lansy ::
Char ->
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO Double
lansy :: Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Double
lansy Char
norm Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> IO Double
FFI.lansy Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
workPtr
lantb ::
Char ->
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO Double
lantb :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Double
lantb Char
norm Char
uplo Char
diag Int
k Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> IO Double
FFI.lantb Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
workPtr
lantp ::
Char ->
Char ->
Char ->
Int ->
Array ZeroInt (Complex Double) ->
Int ->
IO Double
lantp :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt (Complex Double)
-> Int
-> IO Double
lantp Char
norm Char
uplo Char
diag Int
n Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> IO Double
FFI.lantp Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr Double
workPtr
lantr ::
Char ->
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO Double
lantr :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Double
lantr Char
norm Char
uplo Char
diag Int
m Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO Double (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
mPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> IO Double
FFI.lantr Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
workPtr
lapll ::
Int ->
IOArray ZeroInt (Complex Double) ->
Int ->
IOArray ZeroInt (Complex Double) ->
Int ->
IO (Double)
lapll :: Int
-> IOArray ZeroInt (Complex Double)
-> Int
-> IOArray ZeroInt (Complex Double)
-> Int
-> IO Double
lapll Int
n IOArray ZeroInt (Complex Double)
x Int
incx IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
y
String -> Bool -> IO ()
Call.assert String
"lapll: 1+(n-1)*incx == xDim0" (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
incx Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
String -> Bool -> IO ()
Call.assert String
"lapll: 1+(n-1)*incy == yDim0" (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
incy Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
yDim0)
ContT Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
Ptr CInt
incxPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr (Complex Double)
yPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
y
Ptr CInt
incyPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
Ptr Double
ssminPtr <- FortranIO Double (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT Double IO ()
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Double IO ()) -> IO () -> ContT Double IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> IO ()
FFI.lapll Ptr CInt
nPtr Ptr (Complex Double)
xPtr Ptr CInt
incxPtr Ptr (Complex Double)
yPtr Ptr CInt
incyPtr Ptr Double
ssminPtr
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
ssminPtr
lapmr ::
Bool ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt CInt ->
IO ()
lapmr :: Bool
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt CInt
-> IO ()
lapmr Bool
forwrd IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lapmr Ptr Bool
forwrdPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr CInt
kPtr
lapmt ::
Bool ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt CInt ->
IO ()
lapmt :: Bool
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt CInt
-> IO ()
lapmt Bool
forwrd Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lapmt Ptr Bool
forwrdPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr CInt
kPtr
laqgb ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt Double ->
Array ZeroInt Double ->
Double ->
Double ->
Double ->
IO (Char)
laqgb :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> IO Char
laqgb Int
kl Int
ku IOArray (ZeroInt, ZeroInt) (Complex Double)
ab Array ZeroInt Double
r Array ZeroInt Double
c Double
rowcnd Double
colcnd Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Char (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
rPtr <- Array ZeroInt Double -> FortranIO Char (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
r
Ptr Double
cPtr <- Array ZeroInt Double -> FortranIO Char (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
c
Ptr Double
rowcndPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rowcnd
Ptr Double
colcndPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
colcnd
Ptr Double
amaxPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
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 (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CChar
-> IO ()
FFI.laqgb Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
rPtr Ptr Double
cPtr Ptr Double
rowcndPtr Ptr Double
colcndPtr Ptr Double
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) (Complex Double) ->
Array ZeroInt Double ->
Array ZeroInt Double ->
Double ->
Double ->
Double ->
IO (Char)
laqge :: IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> IO Char
laqge IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt Double
r Array ZeroInt Double
c Double
rowcnd Double
colcnd Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Char (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
rPtr <- Array ZeroInt Double -> FortranIO Char (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
r
Ptr Double
cPtr <- Array ZeroInt Double -> FortranIO Char (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
c
Ptr Double
rowcndPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rowcnd
Ptr Double
colcndPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
colcnd
Ptr Double
amaxPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
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 (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CChar
-> IO ()
FFI.laqge Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
rPtr Ptr Double
cPtr Ptr Double
rowcndPtr Ptr Double
colcndPtr Ptr Double
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)
laqhb ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Double ->
Double ->
IO (Array ZeroInt Double, Char)
laqhb :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Double
-> IO (Array ZeroInt Double, Char)
laqhb Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Double)
ab Double
scond Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Double
s <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Array ZeroInt Double, Char) IO (Array ZeroInt Double, Char)
-> IO (Array ZeroInt Double, Char)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Double, Char) IO (Array ZeroInt Double, Char)
-> IO (Array ZeroInt Double, Char))
-> ContT
(Array ZeroInt Double, Char) IO (Array ZeroInt Double, Char)
-> IO (Array ZeroInt Double, Char)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Double, Char) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Char) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int -> FortranIO (Array ZeroInt Double, Char) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt Double, Char) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int -> FortranIO (Array ZeroInt Double, Char) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Char) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr Double
scondPtr <- Double -> FortranIO (Array ZeroInt Double, Char) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
scond
Ptr Double
amaxPtr <- Double -> FortranIO (Array ZeroInt Double, Char) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
amax
Ptr CChar
equedPtr <- FortranIO (Array ZeroInt Double, Char) (Ptr CChar)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Double, Char) IO ()
forall a. IO a -> ContT (Array ZeroInt Double, Char) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Char) IO ())
-> IO () -> ContT (Array ZeroInt Double, Char) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CChar
-> IO ()
FFI.laqhb Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
amaxPtr Ptr CChar
equedPtr
IO (Array ZeroInt Double, Char)
-> ContT
(Array ZeroInt Double, Char) IO (Array ZeroInt Double, Char)
forall a. IO a -> ContT (Array ZeroInt Double, Char) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Char)
-> ContT
(Array ZeroInt Double, Char) IO (Array ZeroInt Double, Char))
-> IO (Array ZeroInt Double, Char)
-> ContT
(Array ZeroInt Double, Char) IO (Array ZeroInt Double, Char)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double -> Char -> (Array ZeroInt Double, Char))
-> IO
(Array ZeroInt Double -> Char -> (Array ZeroInt Double, Char))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Array ZeroInt Double -> Char -> (Array ZeroInt Double, Char))
-> IO (Array ZeroInt Double)
-> IO (Char -> (Array ZeroInt Double, Char))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
s
IO (Char -> (Array ZeroInt Double, Char))
-> IO Char -> IO (Array ZeroInt Double, Char)
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)
laqhe ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt Double ->
Double ->
Double ->
IO (Char)
laqhe :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Double
-> Double
-> IO Char
laqhe Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt Double
s Double
scond Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
s
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"laqhe: 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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Char (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
sPtr <- Array ZeroInt Double -> FortranIO Char (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
s
Ptr Double
scondPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
scond
Ptr Double
amaxPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
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 (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CChar
-> IO ()
FFI.laqhe Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
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)
laqhp ::
Char ->
IOArray ZeroInt (Complex Double) ->
Array ZeroInt Double ->
Double ->
Double ->
IO (Char)
laqhp :: Char
-> IOArray ZeroInt (Complex Double)
-> Array ZeroInt Double
-> Double
-> Double
-> IO Char
laqhp Char
uplo IOArray ZeroInt (Complex Double)
ap Array ZeroInt Double
s Double
scond Double
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
s
let n :: Int
n = Int
sDim0
String -> Bool -> IO ()
Call.assert String
"laqhp: 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 (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Char (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
Ptr Double
sPtr <- Array ZeroInt Double -> FortranIO Char (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
s
Ptr Double
scondPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
scond
Ptr Double
amaxPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
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 (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CChar
-> IO ()
FFI.laqhp Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
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) (Complex Double) ->
IOArray ZeroInt CInt ->
IOArray ZeroInt Double ->
IOArray ZeroInt Double ->
IO (Array ZeroInt (Complex Double))
laqp2 :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt CInt
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IO (Array ZeroInt (Complex Double))
laqp2 Int
m Int
offset IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray ZeroInt CInt
jpvt IOArray ZeroInt Double
vn1 IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
-> IO (Array ZeroInt (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
-> IO (Array ZeroInt (Complex Double)))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
-> IO (Array ZeroInt (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
offsetPtr <- Int -> FortranIO (Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
offset
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
jpvtPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt (Complex Double)) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpvt
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr Double
vn1Ptr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt (Complex Double)) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
vn1
Ptr Double
vn2Ptr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt (Complex Double)) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
vn2
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
IO () -> ContT (Array ZeroInt (Complex Double)) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double)) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> IO ()
FFI.laqp2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
offsetPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
jpvtPtr Ptr (Complex Double)
tauPtr Ptr Double
vn1Ptr Ptr Double
vn2Ptr Ptr (Complex Double)
workPtr
IO (Array ZeroInt (Complex Double))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
forall a. IO a -> ContT (Array ZeroInt (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double)))
-> IO (Array ZeroInt (Complex Double))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
laqps ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt CInt ->
Int ->
IOArray ZeroInt Double ->
IOArray ZeroInt Double ->
IOArray ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int, Array ZeroInt (Complex Double))
laqps :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt CInt
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Int, Array ZeroInt (Complex Double))
laqps Int
m Int
offset IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray ZeroInt CInt
jpvt Int
kb IOArray ZeroInt Double
vn1 IOArray ZeroInt Double
vn2 IOArray ZeroInt (Complex Double)
auxv IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kb
ContT
(Int, Array ZeroInt (Complex Double))
IO
(Int, Array ZeroInt (Complex Double))
-> IO (Int, Array ZeroInt (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt (Complex Double))
IO
(Int, Array ZeroInt (Complex Double))
-> IO (Int, Array ZeroInt (Complex Double)))
-> ContT
(Int, Array ZeroInt (Complex Double))
IO
(Int, Array ZeroInt (Complex Double))
-> IO (Int, Array ZeroInt (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Int, Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Int, Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
offsetPtr <- Int -> FortranIO (Int, Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
offset
Ptr CInt
nbPtr <- Int -> FortranIO (Int, Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
Ptr CInt
kbPtr <- FortranIO (Int, Array ZeroInt (Complex Double)) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
jpvtPtr <- IOArray ZeroInt CInt
-> FortranIO (Int, Array ZeroInt (Complex Double)) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpvt
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr Double
vn1Ptr <- IOArray ZeroInt Double
-> FortranIO (Int, Array ZeroInt (Complex Double)) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
vn1
Ptr Double
vn2Ptr <- IOArray ZeroInt Double
-> FortranIO (Int, Array ZeroInt (Complex Double)) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
vn2
Ptr (Complex Double)
auxvPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
auxv
Ptr (Complex Double)
fPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
f
Ptr CInt
ldfPtr <- Int -> FortranIO (Int, Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldf
IO () -> ContT (Int, Array ZeroInt (Complex Double)) IO ()
forall a. IO a -> ContT (Int, Array ZeroInt (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Array ZeroInt (Complex Double)) IO ())
-> IO () -> ContT (Int, Array ZeroInt (Complex Double)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.laqps Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
offsetPtr Ptr CInt
nbPtr Ptr CInt
kbPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
jpvtPtr Ptr (Complex Double)
tauPtr Ptr Double
vn1Ptr Ptr Double
vn2Ptr Ptr (Complex Double)
auxvPtr Ptr (Complex Double)
fPtr Ptr CInt
ldfPtr
IO (Int, Array ZeroInt (Complex Double))
-> ContT
(Int, Array ZeroInt (Complex Double))
IO
(Int, Array ZeroInt (Complex Double))
forall a. IO a -> ContT (Int, Array ZeroInt (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Array ZeroInt (Complex Double))
-> ContT
(Int, Array ZeroInt (Complex Double))
IO
(Int, Array ZeroInt (Complex Double)))
-> IO (Int, Array ZeroInt (Complex Double))
-> ContT
(Int, Array ZeroInt (Complex Double))
IO
(Int, Array ZeroInt (Complex Double))
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt (Complex Double)
-> (Int, Array ZeroInt (Complex Double)))
-> IO
(Int
-> Array ZeroInt (Complex Double)
-> (Int, Array ZeroInt (Complex Double)))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Int
-> Array ZeroInt (Complex Double)
-> (Int, Array ZeroInt (Complex Double)))
-> IO Int
-> IO
(Array ZeroInt (Complex Double)
-> (Int, Array ZeroInt (Complex Double)))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (Complex Double)
-> (Int, Array ZeroInt (Complex Double)))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int, Array ZeroInt (Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
laqr0 ::
Bool ->
Bool ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO (Array ZeroInt (Complex Double), Int)
laqr0 :: Bool
-> Bool
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO (Array ZeroInt (Complex Double), Int)
laqr0 Bool
wantt Bool
wantz Int
ilo IOArray (ZeroInt, ZeroInt) (Complex Double)
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
w <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wanttPtr <- Bool -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
Ptr Bool
wantzPtr <- Bool -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr (Complex Double)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
h
Ptr CInt
ldhPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr (Complex Double)
wPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
w
Ptr CInt
ilozPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
Ptr CInt
ihizPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laqr0 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Double)
hPtr Ptr CInt
ldhPtr Ptr (Complex Double)
wPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
w
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
laqr1 ::
Array (ZeroInt,ZeroInt) (Complex Double) ->
Complex Double ->
Complex Double ->
IO (Array ZeroInt (Complex Double))
laqr1 :: Array (ZeroInt, ZeroInt) (Complex Double)
-> Complex Double
-> Complex Double
-> IO (Array ZeroInt (Complex Double))
laqr1 Array (ZeroInt, ZeroInt) (Complex Double)
h Complex Double
s1 Complex Double
s2 = 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
h
let n :: Int
n = Int
hDim0
let ldh :: Int
ldh = Int
hDim1
IOArray ZeroInt (Complex Double)
v <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
-> IO (Array ZeroInt (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
-> IO (Array ZeroInt (Complex Double)))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
-> IO (Array ZeroInt (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
hPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
h
Ptr CInt
ldhPtr <- Int -> FortranIO (Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr (Complex Double)
s1Ptr <- Complex Double
-> FortranIO
(Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
s1
Ptr (Complex Double)
s2Ptr <- Complex Double
-> FortranIO
(Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
s2
Ptr (Complex Double)
vPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
v
IO () -> ContT (Array ZeroInt (Complex Double)) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double)) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> IO ()
FFI.laqr1 Ptr CInt
nPtr Ptr (Complex Double)
hPtr Ptr CInt
ldhPtr Ptr (Complex Double)
s1Ptr Ptr (Complex Double)
s2Ptr Ptr (Complex Double)
vPtr
IO (Array ZeroInt (Complex Double))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
forall a. IO a -> ContT (Array ZeroInt (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double)))
-> IO (Array ZeroInt (Complex Double))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
v
laqr2 ::
Bool ->
Bool ->
Int ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
IO (Int, Int, Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double))
laqr2 :: Bool
-> Bool
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
laqr2 Bool
wantt Bool
wantz Int
ktop Int
kbot Int
nw IOArray (ZeroInt, ZeroInt) (Complex Double)
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
sh <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kbot
IOArray (ZeroInt, ZeroInt) (Complex Double)
v <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldv
IOArray (ZeroInt, ZeroInt) (Complex Double)
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldt
IOArray (ZeroInt, ZeroInt) (Complex Double)
wv <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldwv
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wanttPtr <- Bool
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
Ptr Bool
wantzPtr <- Bool
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
ktopPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ktop
Ptr CInt
kbotPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kbot
Ptr CInt
nwPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nw
Ptr (Complex Double)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
h
Ptr CInt
ldhPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr CInt
ilozPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
Ptr CInt
ihizPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
nsPtr <- FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
ndPtr <- FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
shPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
sh
Ptr (Complex Double)
vPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
v
Ptr CInt
ldvPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr CInt
nhPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nh
Ptr (Complex Double)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
t
Ptr CInt
ldtPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr CInt
nvPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nv
Ptr (Complex Double)
wvPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
wv
Ptr CInt
ldwvPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwv
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
IO ()
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
()
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
())
-> IO ()
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.laqr2 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
ktopPtr Ptr CInt
kbotPtr Ptr CInt
nwPtr Ptr (Complex Double)
hPtr Ptr CInt
ldhPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr CInt
nsPtr Ptr CInt
ndPtr Ptr (Complex Double)
shPtr Ptr (Complex Double)
vPtr Ptr CInt
ldvPtr Ptr CInt
nhPtr Ptr (Complex Double)
tPtr Ptr CInt
ldtPtr Ptr CInt
nvPtr Ptr (Complex Double)
wvPtr Ptr CInt
ldwvPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr
IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ (Int
-> Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO
(Int
-> Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Int
-> Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO Int
-> IO
(Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO Int
-> IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
sh
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
v
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
t
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
wv
laqr3 ::
Bool ->
Bool ->
Int ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
IO (Int, Int, Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double))
laqr3 :: Bool
-> Bool
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
laqr3 Bool
wantt Bool
wantz Int
ktop Int
kbot Int
nw IOArray (ZeroInt, ZeroInt) (Complex Double)
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
sh <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kbot
IOArray (ZeroInt, ZeroInt) (Complex Double)
v <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldv
IOArray (ZeroInt, ZeroInt) (Complex Double)
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldt
IOArray (ZeroInt, ZeroInt) (Complex Double)
wv <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldwv
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wanttPtr <- Bool
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
Ptr Bool
wantzPtr <- Bool
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
ktopPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ktop
Ptr CInt
kbotPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kbot
Ptr CInt
nwPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nw
Ptr (Complex Double)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
h
Ptr CInt
ldhPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr CInt
ilozPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
Ptr CInt
ihizPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
nsPtr <- FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
ndPtr <- FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
shPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
sh
Ptr (Complex Double)
vPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
v
Ptr CInt
ldvPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr CInt
nhPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nh
Ptr (Complex Double)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
t
Ptr CInt
ldtPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr CInt
nvPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nv
Ptr (Complex Double)
wvPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
wv
Ptr CInt
ldwvPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwv
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
IO ()
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
()
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
())
-> IO ()
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.laqr3 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
ktopPtr Ptr CInt
kbotPtr Ptr CInt
nwPtr Ptr (Complex Double)
hPtr Ptr CInt
ldhPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr CInt
nsPtr Ptr CInt
ndPtr Ptr (Complex Double)
shPtr Ptr (Complex Double)
vPtr Ptr CInt
ldvPtr Ptr CInt
nhPtr Ptr (Complex Double)
tPtr Ptr CInt
ldtPtr Ptr CInt
nvPtr Ptr (Complex Double)
wvPtr Ptr CInt
ldwvPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr
IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a.
IO a
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ (Int
-> Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO
(Int
-> Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Int
-> Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO Int
-> IO
(Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO Int
-> IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
sh
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
v
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
t
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> (Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int, Int, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
wv
laqr4 ::
Bool ->
Bool ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO (Array ZeroInt (Complex Double), Int)
laqr4 :: Bool
-> Bool
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO (Array ZeroInt (Complex Double), Int)
laqr4 Bool
wantt Bool
wantz Int
ilo IOArray (ZeroInt, ZeroInt) (Complex Double)
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
w <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wanttPtr <- Bool -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
Ptr Bool
wantzPtr <- Bool -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
Ptr (Complex Double)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
h
Ptr CInt
ldhPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr (Complex Double)
wPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
w
Ptr CInt
ilozPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
Ptr CInt
ihizPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laqr4 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Double)
hPtr Ptr CInt
ldhPtr Ptr (Complex Double)
wPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
w
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
laqr5 ::
Bool ->
Bool ->
Int ->
Int ->
Int ->
IOArray ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double))
laqr5 :: Bool
-> Bool
-> Int
-> Int
-> Int
-> IOArray ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
laqr5 Bool
wantt Bool
wantz Int
kacc22 Int
ktop Int
kbot IOArray ZeroInt (Complex Double)
s IOArray (ZeroInt, ZeroInt) (Complex Double)
h Int
iloz IOArray (ZeroInt, ZeroInt) (Complex Double)
z Int
ldv Int
ldu Int
nv Int
ldwv Int
nh Int
ldwh = do
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
s
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
z
let nshfts :: Int
nshfts = Int
sDim0
let n :: Int
n = Int
hDim0
let ldh :: Int
ldh = Int
hDim1
let ihiz :: Int
ihiz = Int
zDim0
let ldz :: Int
ldz = Int
zDim1
IOArray (ZeroInt, ZeroInt) (Complex Double)
v <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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) (Complex Double)
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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) (Complex Double)
wv <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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) (Complex Double)
wh <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nh Int
ldwh
ContT
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr Bool
wanttPtr <- Bool
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
Ptr Bool
wantzPtr <- Bool
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
kacc22Ptr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kacc22
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
ktopPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ktop
Ptr CInt
kbotPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kbot
Ptr CInt
nshftsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nshfts
Ptr (Complex Double)
sPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
s
Ptr (Complex Double)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
h
Ptr CInt
ldhPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
Ptr CInt
ilozPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
Ptr CInt
ihizPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
vPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
v
Ptr CInt
ldvPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr (Complex Double)
uPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr CInt
nvPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nv
Ptr (Complex Double)
wvPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
wv
Ptr CInt
ldwvPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwv
Ptr CInt
nhPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nh
Ptr (Complex Double)
whPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
wh
Ptr CInt
ldwhPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwh
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> 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 (Complex Double)
sPtr Ptr (Complex Double)
hPtr Ptr CInt
ldhPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
vPtr Ptr CInt
ldvPtr Ptr (Complex Double)
uPtr Ptr CInt
lduPtr Ptr CInt
nvPtr Ptr (Complex Double)
wvPtr Ptr CInt
ldwvPtr Ptr CInt
nhPtr Ptr (Complex Double)
whPtr Ptr CInt
ldwhPtr
IO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
v
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
u
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
wv
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
wh
laqsb ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt Double ->
Double ->
Double ->
IO (Char)
laqsb :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Double
-> Double
-> IO Char
laqsb Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Double)
ab Array ZeroInt Double
s Double
scond Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Char (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
sPtr <- Array ZeroInt Double -> FortranIO Char (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
s
Ptr Double
scondPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
scond
Ptr Double
amaxPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
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 (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CChar
-> IO ()
FFI.laqsb Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
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 (Complex Double) ->
Array ZeroInt Double ->
Double ->
Double ->
IO (Char)
laqsp :: Char
-> IOArray ZeroInt (Complex Double)
-> Array ZeroInt Double
-> Double
-> Double
-> IO Char
laqsp Char
uplo IOArray ZeroInt (Complex Double)
ap Array ZeroInt Double
s Double
scond Double
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Char (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
Ptr Double
sPtr <- Array ZeroInt Double -> FortranIO Char (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
s
Ptr Double
scondPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
scond
Ptr Double
amaxPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
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 (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CChar
-> IO ()
FFI.laqsp Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
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) (Complex Double) ->
Array ZeroInt Double ->
Double ->
Double ->
IO (Char)
laqsy :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt Double
-> Double
-> Double
-> IO Char
laqsy Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt Double
s Double
scond Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Char (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
sPtr <- Array ZeroInt Double -> FortranIO Char (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
s
Ptr Double
scondPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
scond
Ptr Double
amaxPtr <- Double -> FortranIO Char (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
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 (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CChar
-> IO ()
FFI.laqsy Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
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)
lar1v ::
Int ->
Int ->
Double ->
Array ZeroInt Double ->
Array ZeroInt Double ->
Array ZeroInt Double ->
Array ZeroInt Double ->
Double ->
Double ->
IOArray ZeroInt (Complex Double) ->
Bool ->
Int ->
IO (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double, Double)
lar1v :: Int
-> Int
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> IOArray ZeroInt (Complex Double)
-> Bool
-> Int
-> IO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
lar1v Int
b1 Int
bn Double
lambda Array ZeroInt Double
d Array ZeroInt Double
l Array ZeroInt Double
ld Array ZeroInt Double
lld Double
pivmin Double
gaptol IOArray ZeroInt (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 Double
work <- Int -> IO (IOArray ZeroInt Double)
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, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
IO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
-> IO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
IO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
-> IO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
-> ContT
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
IO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
-> IO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
b1Ptr <- Int
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
b1
Ptr CInt
bnPtr <- Int
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
bn
Ptr Double
lambdaPtr <- Double
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
lambda
Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
d
Ptr Double
lPtr <- Array ZeroInt Double
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
l
Ptr Double
ldPtr <- Array ZeroInt Double
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
ld
Ptr Double
lldPtr <- Array ZeroInt Double
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
lld
Ptr Double
pivminPtr <- Double
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
pivmin
Ptr Double
gaptolPtr <- Double
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
gaptol
Ptr (Complex Double)
zPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
z
Ptr Bool
wantncPtr <- Bool
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantnc
Ptr CInt
negcntPtr <- FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
ztzPtr <- FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
mingmaPtr <- FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
rPtr <- Int
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
r
Ptr CInt
isuppzPtr <- IOArray ZeroInt CInt
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isuppz
Ptr Double
nrminvPtr <- FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
residPtr <- FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
rqcorrPtr <- FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
IO ()
-> ContT
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
IO
()
forall a.
IO a
-> ContT
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
IO
())
-> IO ()
-> ContT
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Bool
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.lar1v Ptr CInt
nPtr Ptr CInt
b1Ptr Ptr CInt
bnPtr Ptr Double
lambdaPtr Ptr Double
dPtr Ptr Double
lPtr Ptr Double
ldPtr Ptr Double
lldPtr Ptr Double
pivminPtr Ptr Double
gaptolPtr Ptr (Complex Double)
zPtr Ptr Bool
wantncPtr Ptr CInt
negcntPtr Ptr Double
ztzPtr Ptr Double
mingmaPtr Ptr CInt
rPtr Ptr CInt
isuppzPtr Ptr Double
nrminvPtr Ptr Double
residPtr Ptr Double
rqcorrPtr Ptr Double
workPtr
IO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
-> ContT
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
IO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
forall a.
IO a
-> ContT
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
-> ContT
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
IO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
-> IO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
-> ContT
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
IO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
forall a b. (a -> b) -> a -> b
$ (Int
-> Double
-> Double
-> Int
-> Array ZeroInt CInt
-> Double
-> Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
-> IO
(Int
-> Double
-> Double
-> Int
-> Array ZeroInt CInt
-> Double
-> Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,)
IO
(Int
-> Double
-> Double
-> Int
-> Array ZeroInt CInt
-> Double
-> Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
-> IO Int
-> IO
(Double
-> Double
-> Int
-> Array ZeroInt CInt
-> Double
-> Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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
(Double
-> Double
-> Int
-> Array ZeroInt CInt
-> Double
-> Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
-> IO Double
-> IO
(Double
-> Int
-> Array ZeroInt CInt
-> Double
-> Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
ztzPtr
IO
(Double
-> Int
-> Array ZeroInt CInt
-> Double
-> Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
-> IO Double
-> IO
(Int
-> Array ZeroInt CInt
-> Double
-> Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
mingmaPtr
IO
(Int
-> Array ZeroInt CInt
-> Double
-> Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
-> IO Int
-> IO
(Array ZeroInt CInt
-> Double
-> Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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
-> Double
-> Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
-> IO (Array ZeroInt CInt)
-> IO
(Double
-> Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
forall 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
(Double
-> Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
-> IO Double
-> IO
(Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
nrminvPtr
IO
(Double
-> Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
-> IO Double
-> IO
(Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
residPtr
IO
(Double
-> (Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double))
-> IO Double
-> IO
(Int, Double, Double, Int, Array ZeroInt CInt, Double, Double,
Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rqcorrPtr
lar2v ::
Int ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
Int ->
Array ZeroInt Double ->
Array ZeroInt (Complex Double) ->
Int ->
IO ()
lar2v :: Int
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> Int
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> IO ()
lar2v Int
n IOArray ZeroInt (Complex Double)
x IOArray ZeroInt (Complex Double)
y IOArray ZeroInt (Complex Double)
z Int
incx Array ZeroInt Double
c Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
s
String -> Bool -> IO ()
Call.assert String
"lar2v: 1+(n-1)*incx == xDim0" (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
incx Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
String -> Bool -> IO ()
Call.assert String
"lar2v: 1+(n-1)*incx == yDim0" (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
incx Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
yDim0)
String -> Bool -> IO ()
Call.assert String
"lar2v: 1+(n-1)*incx == zDim0" (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
incx Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 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 (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
Ptr (Complex Double)
yPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
y
Ptr (Complex Double)
zPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
z
Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr Double
cPtr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
c
Ptr (Complex Double)
sPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.lar2v Ptr CInt
nPtr Ptr (Complex Double)
xPtr Ptr (Complex Double)
yPtr Ptr (Complex Double)
zPtr Ptr CInt
incxPtr Ptr Double
cPtr Ptr (Complex Double)
sPtr Ptr CInt
inccPtr
larcm ::
Array (ZeroInt,ZeroInt) Double ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double))
larcm :: Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
larcm Array (ZeroInt, ZeroInt) Double
a Array (ZeroInt, ZeroInt) (Complex Double)
b Int
ldc = 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
b
let m :: Int
m = Int
aDim0
let lda :: Int
lda = Int
aDim1
let n :: Int
n = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
IOArray (ZeroInt, ZeroInt) (Complex Double)
c <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldc
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double)))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
a
Ptr CInt
ldaPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> IO ()
FFI.larcm Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr Double
rworkPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
larf ::
Char ->
Int ->
Array ZeroInt (Complex Double) ->
Int ->
Complex Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO ()
larf :: Char
-> Int
-> Array ZeroInt (Complex Double)
-> Int
-> Complex Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO ()
larf Char
side Int
m Array ZeroInt (Complex Double)
v Int
incv Complex Double
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
c
let _vSize :: Int
_vSize = Int
vDim0
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
vPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
v
Ptr CInt
incvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incv
Ptr (Complex Double)
tauPtr <- Complex Double -> FortranIO () (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> IO ()
FFI.larf Ptr CChar
sidePtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
vPtr Ptr CInt
incvPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
workPtr
larfb ::
Char ->
Char ->
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO ()
larfb :: Char
-> Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO ()
larfb Char
side Char
trans Char
direct Char
storev Int
m Array (ZeroInt, ZeroInt) (Complex Double)
v Array (ZeroInt, ZeroInt) (Complex Double)
t IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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 (Complex Double)
vPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
v
Ptr CInt
ldvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr (Complex Double)
tPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
t
Ptr CInt
ldtPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> 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 (Complex Double)
vPtr Ptr CInt
ldvPtr Ptr (Complex Double)
tPtr Ptr CInt
ldtPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
workPtr Ptr CInt
ldworkPtr
larfg ::
Int ->
Complex Double ->
IOArray ZeroInt (Complex Double) ->
Int ->
IO (Complex Double, Complex Double)
larfg :: Int
-> Complex Double
-> IOArray ZeroInt (Complex Double)
-> Int
-> IO (Complex Double, Complex Double)
larfg Int
n Complex Double
alpha IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
x
let _xSize :: Int
_xSize = Int
xDim0
ContT
(Complex Double, Complex Double)
IO
(Complex Double, Complex Double)
-> IO (Complex Double, Complex Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Complex Double, Complex Double)
IO
(Complex Double, Complex Double)
-> IO (Complex Double, Complex Double))
-> ContT
(Complex Double, Complex Double)
IO
(Complex Double, Complex Double)
-> IO (Complex Double, Complex Double)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Complex Double, Complex Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
alphaPtr <- Complex Double
-> FortranIO
(Complex Double, Complex Double) (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
alpha
Ptr (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Complex Double, Complex Double) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
Ptr CInt
incxPtr <- Int -> FortranIO (Complex Double, Complex Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr (Complex Double)
tauPtr <- FortranIO (Complex Double, Complex Double) (Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Complex Double, Complex Double) IO ()
forall a. IO a -> ContT (Complex Double, Complex Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Complex Double, Complex Double) IO ())
-> IO () -> ContT (Complex Double, Complex Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> IO ()
FFI.larfg Ptr CInt
nPtr Ptr (Complex Double)
alphaPtr Ptr (Complex Double)
xPtr Ptr CInt
incxPtr Ptr (Complex Double)
tauPtr
IO (Complex Double, Complex Double)
-> ContT
(Complex Double, Complex Double)
IO
(Complex Double, Complex Double)
forall a. IO a -> ContT (Complex Double, Complex Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Complex Double, Complex Double)
-> ContT
(Complex Double, Complex Double)
IO
(Complex Double, Complex Double))
-> IO (Complex Double, Complex Double)
-> ContT
(Complex Double, Complex Double)
IO
(Complex Double, Complex Double)
forall a b. (a -> b) -> a -> b
$ (Complex Double
-> Complex Double -> (Complex Double, Complex Double))
-> IO
(Complex Double
-> Complex Double -> (Complex Double, Complex Double))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Complex Double
-> Complex Double -> (Complex Double, Complex Double))
-> IO (Complex Double)
-> IO (Complex Double -> (Complex Double, Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
alphaPtr
IO (Complex Double -> (Complex Double, Complex Double))
-> IO (Complex Double) -> IO (Complex Double, Complex Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
tauPtr
larfgp ::
Int ->
Complex Double ->
IOArray ZeroInt (Complex Double) ->
Int ->
IO (Complex Double, Complex Double)
larfgp :: Int
-> Complex Double
-> IOArray ZeroInt (Complex Double)
-> Int
-> IO (Complex Double, Complex Double)
larfgp Int
n Complex Double
alpha IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
x
let _xSize :: Int
_xSize = Int
xDim0
ContT
(Complex Double, Complex Double)
IO
(Complex Double, Complex Double)
-> IO (Complex Double, Complex Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Complex Double, Complex Double)
IO
(Complex Double, Complex Double)
-> IO (Complex Double, Complex Double))
-> ContT
(Complex Double, Complex Double)
IO
(Complex Double, Complex Double)
-> IO (Complex Double, Complex Double)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Complex Double, Complex Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
alphaPtr <- Complex Double
-> FortranIO
(Complex Double, Complex Double) (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
alpha
Ptr (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Complex Double, Complex Double) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
Ptr CInt
incxPtr <- Int -> FortranIO (Complex Double, Complex Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr (Complex Double)
tauPtr <- FortranIO (Complex Double, Complex Double) (Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Complex Double, Complex Double) IO ()
forall a. IO a -> ContT (Complex Double, Complex Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Complex Double, Complex Double) IO ())
-> IO () -> ContT (Complex Double, Complex Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> IO ()
FFI.larfgp Ptr CInt
nPtr Ptr (Complex Double)
alphaPtr Ptr (Complex Double)
xPtr Ptr CInt
incxPtr Ptr (Complex Double)
tauPtr
IO (Complex Double, Complex Double)
-> ContT
(Complex Double, Complex Double)
IO
(Complex Double, Complex Double)
forall a. IO a -> ContT (Complex Double, Complex Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Complex Double, Complex Double)
-> ContT
(Complex Double, Complex Double)
IO
(Complex Double, Complex Double))
-> IO (Complex Double, Complex Double)
-> ContT
(Complex Double, Complex Double)
IO
(Complex Double, Complex Double)
forall a b. (a -> b) -> a -> b
$ (Complex Double
-> Complex Double -> (Complex Double, Complex Double))
-> IO
(Complex Double
-> Complex Double -> (Complex Double, Complex Double))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Complex Double
-> Complex Double -> (Complex Double, Complex Double))
-> IO (Complex Double)
-> IO (Complex Double -> (Complex Double, Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
alphaPtr
IO (Complex Double -> (Complex Double, Complex Double))
-> IO (Complex Double) -> IO (Complex Double, Complex Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
tauPtr
larft ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double))
larft :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
larft Char
direct Char
storev Int
n Array (ZeroInt, ZeroInt) (Complex Double)
v Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
tau
let _vSize :: Int
_vSize = Int
vDim0
let ldv :: Int
ldv = Int
vDim1
let k :: Int
k = Int
tauDim0
IOArray (ZeroInt, ZeroInt) (Complex Double)
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
k Int
ldt
ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double)))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
directPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
direct
Ptr CChar
storevPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
storev
Ptr CInt
nPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr (Complex Double)
vPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
v
Ptr CInt
ldvPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
t
Ptr CInt
ldtPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.larft Ptr CChar
directPtr Ptr CChar
storevPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
vPtr Ptr CInt
ldvPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
tPtr Ptr CInt
ldtPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
t
larfx ::
Char ->
Int ->
Array ZeroInt (Complex Double) ->
Complex Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO ()
larfx :: Char
-> Int
-> Array ZeroInt (Complex Double)
-> Complex Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO ()
larfx Char
side Int
m Array ZeroInt (Complex Double)
v Complex Double
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
c
let _vSize :: Int
_vSize = Int
vDim0
let n :: Int
n = Int
cDim0
let ldc :: Int
ldc = Int
cDim1
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
vPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
v
Ptr (Complex Double)
tauPtr <- Complex Double -> FortranIO () (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> IO ()
FFI.larfx Ptr CChar
sidePtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
vPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
workPtr
largv ::
Int ->
IOArray ZeroInt (Complex Double) ->
Int ->
IOArray ZeroInt (Complex Double) ->
Int ->
Int ->
IO (Array ZeroInt Double)
largv :: Int
-> IOArray ZeroInt (Complex Double)
-> Int
-> IOArray ZeroInt (Complex Double)
-> Int
-> Int
-> IO (Array ZeroInt Double)
largv Int
n IOArray ZeroInt (Complex Double)
x Int
incx IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
y
String -> Bool -> IO ()
Call.assert String
"largv: 1+(n-1)*incx == xDim0" (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
incx Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
String -> Bool -> IO ()
Call.assert String
"largv: 1+(n-1)*incy == yDim0" (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
incy Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
yDim0)
IOArray ZeroInt Double
c <- Int -> IO (IOArray ZeroInt Double)
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 Double) IO (Array ZeroInt Double)
-> IO (Array ZeroInt Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Double) IO (Array ZeroInt Double)
-> IO (Array ZeroInt Double))
-> ContT (Array ZeroInt Double) IO (Array ZeroInt Double)
-> IO (Array ZeroInt Double)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt Double) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
Ptr CInt
incxPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr (Complex Double)
yPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt Double) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
y
Ptr CInt
incyPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
Ptr Double
cPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
c
Ptr CInt
inccPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incc
IO () -> ContT (Array ZeroInt Double) IO ()
forall a. IO a -> ContT (Array ZeroInt Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double) IO ())
-> IO () -> ContT (Array ZeroInt Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.largv Ptr CInt
nPtr Ptr (Complex Double)
xPtr Ptr CInt
incxPtr Ptr (Complex Double)
yPtr Ptr CInt
incyPtr Ptr Double
cPtr Ptr CInt
inccPtr
IO (Array ZeroInt Double)
-> ContT (Array ZeroInt Double) IO (Array ZeroInt Double)
forall a. IO a -> ContT (Array ZeroInt Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double)
-> ContT (Array ZeroInt Double) IO (Array ZeroInt Double))
-> IO (Array ZeroInt Double)
-> ContT (Array ZeroInt Double) IO (Array ZeroInt Double)
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
c
larnv ::
Int ->
IOArray ZeroInt CInt ->
Int ->
IO (Array ZeroInt (Complex Double))
larnv :: Int
-> IOArray ZeroInt CInt
-> Int
-> IO (Array ZeroInt (Complex Double))
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 (Complex Double)
x <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
-> IO (Array ZeroInt (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
-> IO (Array ZeroInt (Complex Double)))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
-> IO (Array ZeroInt (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
idistPtr <- Int -> FortranIO (Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
idist
Ptr CInt
iseedPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt (Complex Double)) (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 (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
IO () -> ContT (Array ZeroInt (Complex Double)) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double)) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr (Complex Double) -> IO ()
FFI.larnv Ptr CInt
idistPtr Ptr CInt
iseedPtr Ptr CInt
nPtr Ptr (Complex Double)
xPtr
IO (Array ZeroInt (Complex Double))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
forall a. IO a -> ContT (Array ZeroInt (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double)))
-> IO (Array ZeroInt (Complex Double))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
x
larrv ::
Double ->
Double ->
IOArray ZeroInt Double ->
IOArray ZeroInt Double ->
Double ->
Array ZeroInt CInt ->
Int ->
Int ->
Int ->
Double ->
Double ->
Double ->
IOArray ZeroInt Double ->
IOArray ZeroInt Double ->
IOArray ZeroInt Double ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
Array ZeroInt Double ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
larrv :: Double
-> Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Double
-> Array ZeroInt CInt
-> Int
-> Int
-> Int
-> Double
-> Double
-> Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Double
-> Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
larrv Double
vl Double
vu IOArray ZeroInt Double
d IOArray ZeroInt Double
l Double
pivmin Array ZeroInt CInt
isplit Int
m Int
dol Int
dou Double
minrgp Double
rtol1 Double
rtol2 IOArray ZeroInt Double
w IOArray ZeroInt Double
werr IOArray ZeroInt Double
wgap Array ZeroInt CInt
iblock Array ZeroInt CInt
indexw Array ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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 Double
work <- Int -> IO (IOArray ZeroInt Double)
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) (Complex Double), Array ZeroInt CInt,
Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Double
vlPtr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vl
Ptr Double
vuPtr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vu
Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
lPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
l
Ptr Double
pivminPtr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
pivmin
Ptr CInt
isplitPtr <- Array ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), 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) (Complex Double), 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) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
dou
Ptr Double
minrgpPtr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
minrgp
Ptr Double
rtol1Ptr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rtol1
Ptr Double
rtol2Ptr <- Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rtol2
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr Double
werrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
werr
Ptr Double
wgapPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
wgap
Ptr CInt
iblockPtr <- Array ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), 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 Double
gersPtr <- Array ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
gers
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.larrv Ptr CInt
nPtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr Double
dPtr Ptr Double
lPtr Ptr Double
pivminPtr Ptr CInt
isplitPtr Ptr CInt
mPtr Ptr CInt
dolPtr Ptr CInt
douPtr Ptr Double
minrgpPtr Ptr Double
rtol1Ptr Ptr Double
rtol2Ptr Ptr Double
wPtr Ptr Double
werrPtr Ptr Double
wgapPtr Ptr CInt
iblockPtr Ptr CInt
indexwPtr Ptr Double
gersPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr CInt
isuppzPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), Array ZeroInt CInt,
Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), 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 ::
Complex Double ->
Complex Double ->
IO (Double, Complex Double, Complex Double)
lartg :: Complex Double
-> Complex Double -> IO (Double, Complex Double, Complex Double)
lartg Complex Double
f Complex Double
g = do
ContT
(Double, Complex Double, Complex Double)
IO
(Double, Complex Double, Complex Double)
-> IO (Double, Complex Double, Complex Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Double, Complex Double, Complex Double)
IO
(Double, Complex Double, Complex Double)
-> IO (Double, Complex Double, Complex Double))
-> ContT
(Double, Complex Double, Complex Double)
IO
(Double, Complex Double, Complex Double)
-> IO (Double, Complex Double, Complex Double)
forall a b. (a -> b) -> a -> b
$ do
Ptr (Complex Double)
fPtr <- Complex Double
-> FortranIO
(Double, Complex Double, Complex Double) (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
f
Ptr (Complex Double)
gPtr <- Complex Double
-> FortranIO
(Double, Complex Double, Complex Double) (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
g
Ptr Double
csPtr <- FortranIO (Double, Complex Double, Complex Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
snPtr <- FortranIO
(Double, Complex Double, Complex Double) (Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
rPtr <- FortranIO
(Double, Complex Double, Complex Double) (Ptr (Complex Double))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Complex Double, Complex Double) IO ()
forall a.
IO a -> ContT (Double, Complex Double, Complex Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Complex Double, Complex Double) IO ())
-> IO () -> ContT (Double, Complex Double, Complex Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> IO ()
FFI.lartg Ptr (Complex Double)
fPtr Ptr (Complex Double)
gPtr Ptr Double
csPtr Ptr (Complex Double)
snPtr Ptr (Complex Double)
rPtr
IO (Double, Complex Double, Complex Double)
-> ContT
(Double, Complex Double, Complex Double)
IO
(Double, Complex Double, Complex Double)
forall a.
IO a -> ContT (Double, Complex Double, Complex Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Complex Double, Complex Double)
-> ContT
(Double, Complex Double, Complex Double)
IO
(Double, Complex Double, Complex Double))
-> IO (Double, Complex Double, Complex Double)
-> ContT
(Double, Complex Double, Complex Double)
IO
(Double, Complex Double, Complex Double)
forall a b. (a -> b) -> a -> b
$ (Double
-> Complex Double
-> Complex Double
-> (Double, Complex Double, Complex Double))
-> IO
(Double
-> Complex Double
-> Complex Double
-> (Double, Complex Double, Complex Double))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Double
-> Complex Double
-> Complex Double
-> (Double, Complex Double, Complex Double))
-> IO Double
-> IO
(Complex Double
-> Complex Double -> (Double, Complex Double, Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
csPtr
IO
(Complex Double
-> Complex Double -> (Double, Complex Double, Complex Double))
-> IO (Complex Double)
-> IO (Complex Double -> (Double, Complex Double, Complex Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
snPtr
IO (Complex Double -> (Double, Complex Double, Complex Double))
-> IO (Complex Double)
-> IO (Double, Complex Double, Complex Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Double) -> IO (Complex Double)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Double)
rPtr
lartv ::
Int ->
IOArray ZeroInt (Complex Double) ->
Int ->
IOArray ZeroInt (Complex Double) ->
Int ->
Array ZeroInt Double ->
Array ZeroInt (Complex Double) ->
Int ->
IO ()
lartv :: Int
-> IOArray ZeroInt (Complex Double)
-> Int
-> IOArray ZeroInt (Complex Double)
-> Int
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Int
-> IO ()
lartv Int
n IOArray ZeroInt (Complex Double)
x Int
incx IOArray ZeroInt (Complex Double)
y Int
incy Array ZeroInt Double
c Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
s
String -> Bool -> IO ()
Call.assert String
"lartv: 1+(n-1)*incx == xDim0" (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
incx Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
String -> Bool -> IO ()
Call.assert String
"lartv: 1+(n-1)*incy == yDim0" (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
incy Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 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 (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr (Complex Double)
yPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
y
Ptr CInt
incyPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
Ptr Double
cPtr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
c
Ptr (Complex Double)
sPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.lartv Ptr CInt
nPtr Ptr (Complex Double)
xPtr Ptr CInt
incxPtr Ptr (Complex Double)
yPtr Ptr CInt
incyPtr Ptr Double
cPtr Ptr (Complex Double)
sPtr Ptr CInt
inccPtr
larz ::
Char ->
Int ->
Int ->
Array ZeroInt (Complex Double) ->
Int ->
Complex Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO ()
larz :: Char
-> Int
-> Int
-> Array ZeroInt (Complex Double)
-> Int
-> Complex Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO ()
larz Char
side Int
m Int
l Array ZeroInt (Complex Double)
v Int
incv Complex Double
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
vPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
v
Ptr CInt
incvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incv
Ptr (Complex Double)
tauPtr <- Complex Double -> FortranIO () (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> IO ()
FFI.larz Ptr CChar
sidePtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
lPtr Ptr (Complex Double)
vPtr Ptr CInt
incvPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
workPtr
larzb ::
Char ->
Char ->
Char ->
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO ()
larzb :: Char
-> Char
-> Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO ()
larzb Char
side Char
trans Char
direct Char
storev Int
m Int
l Array (ZeroInt, ZeroInt) (Complex Double)
v Array (ZeroInt, ZeroInt) (Complex Double)
t IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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 (Complex Double)
vPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
v
Ptr CInt
ldvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr (Complex Double)
tPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
t
Ptr CInt
ldtPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> 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 (Complex Double)
vPtr Ptr CInt
ldvPtr Ptr (Complex Double)
tPtr Ptr CInt
ldtPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
workPtr Ptr CInt
ldworkPtr
larzt ::
Char ->
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double))
larzt :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
larzt Char
direct Char
storev Int
n IOArray (ZeroInt, ZeroInt) (Complex Double)
v Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
tau
let _vSize :: Int
_vSize = Int
vDim0
let ldv :: Int
ldv = Int
vDim1
let k :: Int
k = Int
tauDim0
IOArray (ZeroInt, ZeroInt) (Complex Double)
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
k Int
ldt
ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double)))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
directPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
direct
Ptr CChar
storevPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
storev
Ptr CInt
nPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr (Complex Double)
vPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
v
Ptr CInt
ldvPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
t
Ptr CInt
ldtPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.larzt Ptr CChar
directPtr Ptr CChar
storevPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
vPtr Ptr CInt
ldvPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
tPtr Ptr CInt
ldtPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
t
lascl ::
Char ->
Int ->
Int ->
Double ->
Double ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
lascl :: Char
-> Int
-> Int
-> Double
-> Double
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
lascl Char
type_ Int
kl Int
ku Double
cfrom Double
cto Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
cfromPtr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
cfrom
Ptr Double
ctoPtr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lascl Ptr CChar
type_Ptr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr Double
cfromPtr Ptr Double
ctoPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
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)
laset ::
Char ->
Int ->
Int ->
Complex Double ->
Complex Double ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double))
laset :: Char
-> Int
-> Int
-> Complex Double
-> Complex Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
laset Char
uplo Int
m Int
n Complex Double
alpha Complex Double
beta Int
lda = do
IOArray (ZeroInt, ZeroInt) (Complex Double)
a <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
lda
ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double)))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
mPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
alphaPtr <- Complex Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
alpha
Ptr (Complex Double)
betaPtr <- Complex Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
beta
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.laset Ptr CChar
uploPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
alphaPtr Ptr (Complex Double)
betaPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
lasr ::
Char ->
Char ->
Char ->
Int ->
Array ZeroInt Double ->
Array ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO ()
lasr :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO ()
lasr Char
side Char
pivot Char
direct Int
m Array ZeroInt Double
c Array ZeroInt Double
s IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
cPtr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
c
Ptr Double
sPtr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
s
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.lasr Ptr CChar
sidePtr Ptr CChar
pivotPtr Ptr CChar
directPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
cPtr Ptr Double
sPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr
lassq ::
Array ZeroInt (Complex Double) ->
Int ->
Double ->
Double ->
IO (Double, Double)
lassq :: Array ZeroInt (Complex Double)
-> Int -> Double -> Double -> IO (Double, Double)
lassq Array ZeroInt (Complex Double)
x Int
incx Double
scale Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
x
let n :: Int
n = Int
xDim0
ContT (Double, Double) IO (Double, Double) -> IO (Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Double) IO (Double, Double) -> IO (Double, Double))
-> ContT (Double, Double) IO (Double, Double)
-> IO (Double, Double)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
xPtr <- Array ZeroInt (Complex Double)
-> FortranIO (Double, Double) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
x
Ptr CInt
incxPtr <- Int -> FortranIO (Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr Double
scalePtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
scale
Ptr Double
sumsqPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
sumsq
IO () -> ContT (Double, Double) IO ()
forall a. IO a -> ContT (Double, Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Double) IO ())
-> IO () -> ContT (Double, Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.lassq Ptr CInt
nPtr Ptr (Complex Double)
xPtr Ptr CInt
incxPtr Ptr Double
scalePtr Ptr Double
sumsqPtr
IO (Double, Double) -> ContT (Double, Double) IO (Double, Double)
forall a. IO a -> ContT (Double, Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double) -> ContT (Double, Double) IO (Double, Double))
-> IO (Double, Double)
-> ContT (Double, Double) IO (Double, Double)
forall a b. (a -> b) -> a -> b
$ (Double -> Double -> (Double, Double))
-> IO (Double -> Double -> (Double, Double))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Double -> (Double, Double))
-> IO Double -> IO (Double -> (Double, Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
scalePtr
IO (Double -> (Double, Double)) -> IO Double -> IO (Double, Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
sumsqPtr
laswp ::
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Array ZeroInt CInt ->
Int ->
IO ()
laswp :: IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int -> Int -> Array ZeroInt CInt -> Int -> IO ()
laswp IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laswp Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
k1Ptr Ptr CInt
k2Ptr Ptr CInt
ipivPtr Ptr CInt
incxPtr
lasyf ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) (Complex Double), Int)
lasyf :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
lasyf Char
uplo Int
nb IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
w <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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) (Complex Double), Int)
IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), 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) (Complex Double), 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) (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr (Complex Double)
wPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
w
Ptr CInt
ldwPtr <- Int
-> FortranIO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lasyf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nbPtr Ptr CInt
kbPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
wPtr Ptr CInt
ldwPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Int
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Int
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex 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
kbPtr)
IO
(Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt CInt)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex 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 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) (Complex Double)
-> Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
w
IO
(Int
-> (Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Int, Array ZeroInt CInt,
Array (ZeroInt, ZeroInt) (Complex 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)
lat2c ::
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)
lat2c :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
lat2c Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
a Int
ldsa = 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray (ZeroInt, ZeroInt) (Complex Float)
sa <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldsa
ContT
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Float)
saPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
(Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
sa
Ptr CInt
ldsaPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldsa
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lat2c Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
saPtr Ptr CInt
ldsaPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Float)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) (Complex Float)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall 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) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
sa
IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a 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) (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt Double ->
IO (Double, Int)
latbs :: Char
-> Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt Double
-> IO (Double, Int)
latbs Char
uplo Char
trans Char
diag Char
normin Int
kd Array (ZeroInt, ZeroInt) (Complex Double)
ab IOArray ZeroInt (Complex Double)
x IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CChar
norminPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
normin
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
Ptr Double
scalePtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
cnormPtr <- IOArray ZeroInt Double -> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
cnorm
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.latbs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CChar
norminPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr (Complex Double)
xPtr Ptr Double
scalePtr Ptr Double
cnormPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
scalePtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
latdf ::
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
Double ->
Double ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
IO (Double, Double)
latdf :: Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> Double
-> Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> IO (Double, Double)
latdf Int
ijob Array (ZeroInt, ZeroInt) (Complex Double)
z IOArray ZeroInt (Complex Double)
rhs Double
rdsum Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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
String -> Bool -> IO ()
Call.assert String
"latdf: n == rhsDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 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 (Double, Double) IO (Double, Double) -> IO (Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Double) IO (Double, Double) -> IO (Double, Double))
-> ContT (Double, Double) IO (Double, Double)
-> IO (Double, Double)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
ijobPtr <- Int -> FortranIO (Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
Ptr CInt
nPtr <- Int -> FortranIO (Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
zPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Double) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int -> FortranIO (Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
rhsPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Double) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
rhs
Ptr Double
rdsumPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rdsum
Ptr Double
rdscalPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rdscal
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Double, Double) (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 (Double, Double) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
jpiv
IO () -> ContT (Double, Double) IO ()
forall a. IO a -> ContT (Double, Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Double) IO ())
-> IO () -> ContT (Double, Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.latdf Ptr CInt
ijobPtr Ptr CInt
nPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
rhsPtr Ptr Double
rdsumPtr Ptr Double
rdscalPtr Ptr CInt
ipivPtr Ptr CInt
jpivPtr
IO (Double, Double) -> ContT (Double, Double) IO (Double, Double)
forall a. IO a -> ContT (Double, Double) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double) -> ContT (Double, Double) IO (Double, Double))
-> IO (Double, Double)
-> ContT (Double, Double) IO (Double, Double)
forall a b. (a -> b) -> a -> b
$ (Double -> Double -> (Double, Double))
-> IO (Double -> Double -> (Double, Double))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Double -> (Double, Double))
-> IO Double -> IO (Double -> (Double, Double))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rdsumPtr
IO (Double -> (Double, Double)) -> IO Double -> IO (Double, Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rdscalPtr
latps ::
Char ->
Char ->
Char ->
Char ->
Array ZeroInt (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt Double ->
IO (Double, Int)
latps :: Char
-> Char
-> Char
-> Char
-> Array ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt Double
-> IO (Double, Int)
latps Char
uplo Char
trans Char
diag Char
normin Array ZeroInt (Complex Double)
ap IOArray ZeroInt (Complex Double)
x IOArray ZeroInt Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CChar
norminPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
normin
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
Ptr Double
scalePtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
cnormPtr <- IOArray ZeroInt Double -> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
cnorm
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.latps Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CChar
norminPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
xPtr Ptr Double
scalePtr Ptr Double
cnormPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
scalePtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
latrd ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt Double, Array ZeroInt (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double))
latrd :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
latrd Char
uplo Int
nb IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
e <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
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) (Complex Double)
w <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldw
ContT
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> ContT
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
wPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
w
Ptr CInt
ldwPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldw
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.latrd Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nbPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
ePtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
wPtr Ptr CInt
ldwPtr
IO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
-> ContT
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
IO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
e
IO
(Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> (Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt Double, Array ZeroInt (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double))
forall 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
w
latrs ::
Char ->
Char ->
Char ->
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt Double ->
IO (Double, Int)
latrs :: Char
-> Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt Double
-> IO (Double, Int)
latrs Char
uplo Char
trans Char
diag Char
normin Array (ZeroInt, ZeroInt) (Complex Double)
a IOArray ZeroInt (Complex Double)
x IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CChar
norminPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
normin
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
xPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
x
Ptr Double
scalePtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
cnormPtr <- IOArray ZeroInt Double -> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
cnorm
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.latrs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CChar
norminPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
xPtr Ptr Double
scalePtr Ptr Double
cnormPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
scalePtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
latrz ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt (Complex Double))
latrz :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt (Complex Double))
latrz Int
m Int
l IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
-> IO (Array ZeroInt (Complex Double))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
-> IO (Array ZeroInt (Complex Double)))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
-> IO (Array ZeroInt (Complex Double))
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
lPtr <- Int -> FortranIO (Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
l
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double)) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
IO () -> ContT (Array ZeroInt (Complex Double)) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double)) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> IO ()
FFI.latrz Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
lPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr
IO (Array ZeroInt (Complex Double))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
forall a. IO a -> ContT (Array ZeroInt (Complex Double)) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double)))
-> IO (Array ZeroInt (Complex Double))
-> ContT
(Array ZeroInt (Complex Double))
IO
(Array ZeroInt (Complex Double))
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
lauu2 ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
lauu2 :: Char -> IOArray (ZeroInt, ZeroInt) (Complex Double) -> IO Int
lauu2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lauu2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
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) (Complex Double) ->
IO (Int)
lauum :: Char -> IOArray (ZeroInt, ZeroInt) (Complex Double) -> IO Int
lauum Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lauum Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
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)
pbcon ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Double ->
IO (Double, Int)
pbcon :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> IO (Double, Int)
pbcon Char
uplo Int
kd Array (ZeroInt, ZeroInt) (Complex Double)
ab Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
anormPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
anorm
Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.pbcon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
pbequ ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Double, Double, Int)
pbequ :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Double, Double, Int)
pbequ Char
uplo Int
kd Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt Double
s <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int))
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr Double
scondPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
amaxPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Double, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ())
-> IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.pbequ Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
amaxPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
forall a.
IO a -> ContT (Array ZeroInt Double, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int))
-> IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
-> IO
(Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Double
-> Double -> Int -> (Array ZeroInt Double, Double, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
s
IO
(Double
-> Double -> Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Double
-> IO
(Double -> Int -> (Array ZeroInt Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
scondPtr
IO (Double -> Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Double
-> IO (Int -> (Array ZeroInt Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
amaxPtr
IO (Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Double, 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)
pbrfs ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
pbrfs :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
pbrfs Char
uplo Int
kd Array (ZeroInt, ZeroInt) (Complex Double)
ab Array (ZeroInt, ZeroInt) (Complex Double)
afb Array (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr (Complex Double)
afbPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
afb
Ptr CInt
ldafbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldafb
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.pbrfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr (Complex Double)
afbPtr Ptr CInt
ldafbPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
pbstf ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
pbstf :: Char
-> Int -> IOArray (ZeroInt, ZeroInt) (Complex Double) -> IO Int
pbstf Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbstf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Double)
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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
pbsv :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
pbsv Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Double)
ab IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbsv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr (Complex Double)
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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Char ->
IOArray ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Char, Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)
pbsvx :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Char
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
pbsvx Char
fact Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Double)
ab IOArray (ZeroInt, ZeroInt) (Complex Double)
afb Char
equed IOArray ZeroInt Double
s IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
uploPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr (Complex Double)
afbPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
afb
Ptr CInt
ldafbPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldafb
Ptr CChar
equedPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
rcondPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CChar
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.pbsvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr (Complex Double)
afbPtr Ptr CInt
ldafbPtr Ptr CChar
equedPtr Ptr Double
sPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Char
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> (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) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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)
pbtf2 ::
Char ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
pbtf2 :: Char
-> Int -> IOArray (ZeroInt, ZeroInt) (Complex Double) -> IO Int
pbtf2 Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbtf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Double)
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) (Complex Double) ->
IO (Int)
pbtrf :: Char
-> Int -> IOArray (ZeroInt, ZeroInt) (Complex Double) -> IO Int
pbtrf Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbtrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Double)
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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
pbtrs :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
pbtrs Char
uplo Int
kd Array (ZeroInt, ZeroInt) (Complex Double)
ab IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbtrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr (Complex Double)
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 (Complex Double) ->
IO (Int)
pftrf :: Char -> Char -> Int -> IOArray ZeroInt (Complex Double) -> IO Int
pftrf Char
transr Char
uplo Int
n IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double)
aPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> IO ()
FFI.pftrf Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
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 (Complex Double) ->
IO (Int)
pftri :: Char -> Char -> Int -> IOArray ZeroInt (Complex Double) -> IO Int
pftri Char
transr Char
uplo Int
n IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double)
aPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> IO ()
FFI.pftri Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
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 (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
pftrs :: Char
-> Char
-> Int
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
pftrs Char
transr Char
uplo Int
n Array ZeroInt (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
a
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pftrs Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr (Complex Double)
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) (Complex Double) ->
Double ->
IO (Double, Int)
pocon :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> IO (Double, Int)
pocon Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
a Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
anormPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
anorm
Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.pocon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
poequ ::
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Double, Double, Int)
poequ :: Array (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Double, Double, Int)
poequ Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
s <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int))
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr Double
scondPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
amaxPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Double, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ())
-> IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.poequ Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
amaxPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
forall a.
IO a -> ContT (Array ZeroInt Double, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int))
-> IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
-> IO
(Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Double
-> Double -> Int -> (Array ZeroInt Double, Double, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
s
IO
(Double
-> Double -> Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Double
-> IO
(Double -> Int -> (Array ZeroInt Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
scondPtr
IO (Double -> Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Double
-> IO (Int -> (Array ZeroInt Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
amaxPtr
IO (Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Double, 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)
poequb ::
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Double, Double, Int)
poequb :: Array (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Double, Double, Int)
poequb Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
s <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int))
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr Double
scondPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
amaxPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Double, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ())
-> IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.poequb Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
amaxPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
forall a.
IO a -> ContT (Array ZeroInt Double, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int))
-> IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
-> IO
(Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Double
-> Double -> Int -> (Array ZeroInt Double, Double, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
s
IO
(Double
-> Double -> Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Double
-> IO
(Double -> Int -> (Array ZeroInt Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
scondPtr
IO (Double -> Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Double
-> IO (Int -> (Array ZeroInt Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
amaxPtr
IO (Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Double, 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)
porfs ::
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
porfs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
porfs Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
a Array (ZeroInt, ZeroInt) (Complex Double)
af Array (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
afPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
af
Ptr CInt
ldafPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.porfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
afPtr Ptr CInt
ldafPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
posv ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
posv :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
posv Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.posv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Char ->
IOArray ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Char, Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)
posvx :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Char
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
posvx Char
fact Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
af Char
equed IOArray ZeroInt Double
s IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
uploPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
afPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
af
Ptr CInt
ldafPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
Ptr CChar
equedPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
rcondPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CChar
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.posvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
afPtr Ptr CInt
ldafPtr Ptr CChar
equedPtr Ptr Double
sPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Char
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> (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) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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)
potf2 ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
potf2 :: Char -> IOArray (ZeroInt, ZeroInt) (Complex Double) -> IO Int
potf2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.potf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
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) (Complex Double) ->
IO (Int)
potrf :: Char -> IOArray (ZeroInt, ZeroInt) (Complex Double) -> IO Int
potrf Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.potrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
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) (Complex Double) ->
IO (Int)
potri :: Char -> IOArray (ZeroInt, ZeroInt) (Complex Double) -> IO Int
potri Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.potri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
potrs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
potrs Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.potrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
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 (Complex Double) ->
Double ->
IO (Double, Int)
ppcon :: Char
-> Int
-> Array ZeroInt (Complex Double)
-> Double
-> IO (Double, Int)
ppcon Char
uplo Int
n Array ZeroInt (Complex Double)
ap Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr Double
anormPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
anorm
Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ppcon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
ppequ ::
Char ->
Int ->
Array ZeroInt (Complex Double) ->
IO (Array ZeroInt Double, Double, Double, Int)
ppequ :: Char
-> Int
-> Array ZeroInt (Complex Double)
-> IO (Array ZeroInt Double, Double, Double, Int)
ppequ Char
uplo Int
n Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 Double
s <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int))
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr Double
scondPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
amaxPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Double, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ())
-> IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ppequ Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
amaxPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
forall a.
IO a -> ContT (Array ZeroInt Double, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int))
-> IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
-> IO
(Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Double
-> Double -> Int -> (Array ZeroInt Double, Double, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
s
IO
(Double
-> Double -> Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Double
-> IO
(Double -> Int -> (Array ZeroInt Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
scondPtr
IO (Double -> Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Double
-> IO (Int -> (Array ZeroInt Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
amaxPtr
IO (Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Double, 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)
pprfs ::
Char ->
Int ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
pprfs :: Char
-> Int
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
pprfs Char
uplo Int
n Array ZeroInt (Complex Double)
ap Array ZeroInt (Complex Double)
afp Array (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr (Complex Double)
afpPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
afp
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.pprfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
afpPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
ppsv ::
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
ppsv :: Char
-> Int
-> IOArray ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
ppsv Char
uplo Int
n IOArray ZeroInt (Complex Double)
ap IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ppsv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
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 (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
Char ->
IOArray ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Char, Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)
ppsvx :: Char
-> Char
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> Char
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
ppsvx Char
fact Char
uplo IOArray ZeroInt (Complex Double)
ap IOArray ZeroInt (Complex Double)
afp Char
equed IOArray ZeroInt Double
s IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
uploPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
Ptr (Complex Double)
afpPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
afp
Ptr CChar
equedPtr <- Char
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
rcondPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CChar
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ppsvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
afpPtr Ptr CChar
equedPtr Ptr Double
sPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Char
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> (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) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO
(Int
-> (Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Char, Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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)
pptrf ::
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
IO (Int)
pptrf :: Char -> Int -> IOArray ZeroInt (Complex Double) -> IO Int
pptrf Char
uplo Int
n IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double) -> Ptr CInt -> IO ()
FFI.pptrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
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 (Complex Double) ->
IO (Int)
pptri :: Char -> Int -> IOArray ZeroInt (Complex Double) -> IO Int
pptri Char
uplo Int
n IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double) -> Ptr CInt -> IO ()
FFI.pptri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
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 (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
pptrs :: Char
-> Int
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
pptrs Char
uplo Int
n Array ZeroInt (Complex Double)
ap IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pptrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
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) (Complex Double) ->
Double ->
IO (Array ZeroInt CInt, Int, Int)
pstf2 :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> IO (Array ZeroInt CInt, Int, Int)
pstf2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
work <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
tolPtr <- Double -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
tol
Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.pstf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
pivPtr Ptr CInt
rankPtr Ptr Double
tolPtr Ptr Double
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) (Complex Double) ->
Double ->
IO (Array ZeroInt CInt, Int, Int)
pstrf :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> IO (Array ZeroInt CInt, Int, Int)
pstrf Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
work <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
tolPtr <- Double -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
tol
Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.pstrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
pivPtr Ptr CInt
rankPtr Ptr Double
tolPtr Ptr Double
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 Double ->
Array ZeroInt (Complex Double) ->
Double ->
IO (Double, Int)
ptcon :: Array ZeroInt Double
-> Array ZeroInt (Complex Double) -> Double -> IO (Double, Int)
ptcon Array ZeroInt Double
d Array ZeroInt (Complex Double)
e Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Double
dPtr <- Array ZeroInt Double -> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
d
Ptr (Complex Double)
ePtr <- Array ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
e
Ptr Double
anormPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
anorm
Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ptcon Ptr CInt
nPtr Ptr Double
dPtr Ptr (Complex Double)
ePtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
pteqr ::
Char ->
IOArray ZeroInt Double ->
IOArray ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
pteqr :: Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
pteqr Char
compz IOArray ZeroInt Double
d IOArray ZeroInt Double
e IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double
dPtr <- IOArray ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
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 Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.pteqr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr Double
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 ::
Char ->
Array ZeroInt Double ->
Array ZeroInt (Complex Double) ->
Array ZeroInt Double ->
Array ZeroInt (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
ptrfs :: Char
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
ptrfs Char
uplo Array ZeroInt Double
d Array ZeroInt (Complex Double)
e Array ZeroInt Double
df Array ZeroInt (Complex Double)
ef Array (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
d
Ptr (Complex Double)
ePtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
e
Ptr Double
dfPtr <- Array ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
df
Ptr (Complex Double)
efPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ef
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ptrfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dPtr Ptr (Complex Double)
ePtr Ptr Double
dfPtr Ptr (Complex Double)
efPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
ptsv ::
IOArray ZeroInt Double ->
IOArray ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
ptsv :: IOArray ZeroInt Double
-> IOArray ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
ptsv IOArray ZeroInt Double
d IOArray ZeroInt (Complex Double)
e IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
dPtr <- IOArray ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr (Complex Double)
ePtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
e
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ptsv Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dPtr Ptr (Complex Double)
ePtr Ptr (Complex Double)
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 Double ->
Array ZeroInt (Complex Double) ->
IOArray ZeroInt Double ->
IOArray ZeroInt (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)
ptsvx :: Char
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> IOArray ZeroInt Double
-> IOArray ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
ptsvx Char
fact Array ZeroInt Double
d Array ZeroInt (Complex Double)
e IOArray ZeroInt Double
df IOArray ZeroInt (Complex Double)
ef Array (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
d
Ptr (Complex Double)
ePtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
e
Ptr Double
dfPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
df
Ptr (Complex Double)
efPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ef
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
rcondPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ptsvx Ptr CChar
factPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dPtr Ptr (Complex Double)
ePtr Ptr Double
dfPtr Ptr (Complex Double)
efPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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)
pttrf ::
IOArray ZeroInt Double ->
IOArray ZeroInt (Complex Double) ->
IO (Int)
pttrf :: IOArray ZeroInt Double
-> IOArray ZeroInt (Complex Double) -> IO Int
pttrf IOArray ZeroInt Double
d IOArray ZeroInt (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 Double
dPtr <- IOArray ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr (Complex Double)
ePtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 Double -> Ptr (Complex Double) -> Ptr CInt -> IO ()
FFI.pttrf Ptr CInt
nPtr Ptr Double
dPtr Ptr (Complex Double)
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 ::
Char ->
Array ZeroInt Double ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
pttrs :: Char
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
pttrs Char
uplo Array ZeroInt Double
d Array ZeroInt (Complex Double)
e IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 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 Double
dPtr <- Array ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
d
Ptr (Complex Double)
ePtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
e
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pttrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dPtr Ptr (Complex Double)
ePtr Ptr (Complex Double)
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 ::
Int ->
Array ZeroInt Double ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO ()
ptts2 :: Int
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO ()
ptts2 Int
iuplo Array ZeroInt Double
d Array ZeroInt (Complex Double)
e IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
iuploPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iuplo
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 Double
dPtr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
d
Ptr (Complex Double)
ePtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
e
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.ptts2 Ptr CInt
iuploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dPtr Ptr (Complex Double)
ePtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr
rot ::
IOArray ZeroInt (Complex Double) ->
Int ->
IOArray ZeroInt (Complex Double) ->
Int ->
Double ->
Complex Double ->
IO ()
rot :: IOArray ZeroInt (Complex Double)
-> Int
-> IOArray ZeroInt (Complex Double)
-> Int
-> Double
-> Complex Double
-> IO ()
rot IOArray ZeroInt (Complex Double)
cx Int
incx IOArray ZeroInt (Complex Double)
cy Int
incy Double
c Complex Double
s = do
let cxDim0 :: Int
cxDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
cx
let cyDim0 :: Int
cyDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
cy
let n :: Int
n = Int
cxDim0
String -> Bool -> IO ()
Call.assert String
"rot: n == cyDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cyDim0)
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 (Complex Double)
cxPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
cx
Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr (Complex Double)
cyPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
cy
Ptr CInt
incyPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
Ptr Double
cPtr <- Double -> FortranIO () (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
c
Ptr (Complex Double)
sPtr <- Complex Double -> FortranIO () (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
s
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> IO ()
FFI.rot Ptr CInt
nPtr Ptr (Complex Double)
cxPtr Ptr CInt
incxPtr Ptr (Complex Double)
cyPtr Ptr CInt
incyPtr Ptr Double
cPtr Ptr (Complex Double)
sPtr
rscl ::
Int ->
Double ->
IOArray ZeroInt (Complex Double) ->
Int ->
IO ()
rscl :: Int -> Double -> IOArray ZeroInt (Complex Double) -> Int -> IO ()
rscl Int
n Double
sa IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 Double
saPtr <- Double -> FortranIO () (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
sa
Ptr (Complex Double)
sxPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 Double -> Ptr (Complex Double) -> Ptr CInt -> IO ()
FFI.rscl Ptr CInt
nPtr Ptr Double
saPtr Ptr (Complex Double)
sxPtr Ptr CInt
incxPtr
spcon ::
Char ->
Array ZeroInt (Complex Double) ->
Array ZeroInt CInt ->
Double ->
IO (Double, Int)
spcon :: Char
-> Array ZeroInt (Complex Double)
-> Array ZeroInt CInt
-> Double
-> IO (Double, Int)
spcon Char
uplo Array ZeroInt (Complex Double)
ap Array ZeroInt CInt
ipiv Double
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Double, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Double
anormPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
anorm
Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.spcon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr CInt
ipivPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
spmv ::
Char ->
Int ->
Complex Double ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Int ->
Complex Double ->
IOArray ZeroInt (Complex Double) ->
Int ->
IO ()
spmv :: Char
-> Int
-> Complex Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> Complex Double
-> IOArray ZeroInt (Complex Double)
-> Int
-> IO ()
spmv Char
uplo Int
n Complex Double
alpha Array ZeroInt (Complex Double)
ap Array ZeroInt (Complex Double)
x Int
incx Complex Double
beta IOArray ZeroInt (Complex Double)
y Int
incy = 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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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
$ Array ZeroInt (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
y
let _apSize :: Int
_apSize = Int
apDim0
let _xSize :: Int
_xSize = Int
xDim0
let _ySize :: Int
_ySize = Int
yDim0
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 (Complex Double)
alphaPtr <- Complex Double -> FortranIO () (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
alpha
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr (Complex Double)
xPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
x
Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr (Complex Double)
betaPtr <- Complex Double -> FortranIO () (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
beta
Ptr (Complex Double)
yPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
y
Ptr CInt
incyPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.spmv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
alphaPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
xPtr Ptr CInt
incxPtr Ptr (Complex Double)
betaPtr Ptr (Complex Double)
yPtr Ptr CInt
incyPtr
spr ::
Char ->
Int ->
Complex Double ->
Array ZeroInt (Complex Double) ->
Int ->
IOArray ZeroInt (Complex Double) ->
IO ()
spr :: Char
-> Int
-> Complex Double
-> Array ZeroInt (Complex Double)
-> Int
-> IOArray ZeroInt (Complex Double)
-> IO ()
spr Char
uplo Int
n Complex Double
alpha Array ZeroInt (Complex Double)
x Int
incx IOArray ZeroInt (Complex Double)
ap = 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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
x
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
ap
let _xSize :: Int
_xSize = Int
xDim0
let _apSize :: Int
_apSize = Int
apDim0
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 (Complex Double)
alphaPtr <- Complex Double -> FortranIO () (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
alpha
Ptr (Complex Double)
xPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
x
Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> IO ()
FFI.spr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
alphaPtr Ptr (Complex Double)
xPtr Ptr CInt
incxPtr Ptr (Complex Double)
apPtr
sprfs ::
Char ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
sprfs :: Char
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
sprfs Char
uplo Array ZeroInt (Complex Double)
ap Array ZeroInt (Complex Double)
afp Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr (Complex Double)
afpPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
afp
Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.sprfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
afpPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
spsv ::
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt CInt, Int)
spsv :: Char
-> Int
-> IOArray ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt CInt, Int)
spsv Char
uplo Int
n IOArray ZeroInt (Complex Double)
ap IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spsv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
apPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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 (Complex Double) ->
IOArray ZeroInt (Complex Double) ->
IOArray ZeroInt CInt ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)
spsvx :: Char
-> Char
-> Array ZeroInt (Complex Double)
-> IOArray ZeroInt (Complex Double)
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
spsvx Char
fact Char
uplo Array ZeroInt (Complex Double)
ap IOArray ZeroInt (Complex Double)
afp IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr (Complex Double)
afpPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
afp
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
rcondPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.spsvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
afpPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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)
sptrf ::
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
IO (Array ZeroInt CInt, Int)
sptrf :: Char
-> Int
-> IOArray ZeroInt (Complex Double)
-> IO (Array ZeroInt CInt, Int)
sptrf Char
uplo Int
n IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sptrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
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 (Complex Double) ->
Array ZeroInt CInt ->
IO (Int)
sptri :: Char
-> IOArray ZeroInt (Complex Double) -> Array ZeroInt CInt -> IO Int
sptri Char
uplo IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.sptri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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 (Complex Double) ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
sptrs :: Char
-> Array ZeroInt (Complex Double)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
sptrs Char
uplo Array ZeroInt (Complex Double)
ap Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sptrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
apPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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)
stedc ::
Char ->
IOArray ZeroInt Double ->
IOArray ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
IO (Int)
stedc :: Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> IO Int
stedc Char
compz IOArray ZeroInt Double
d IOArray ZeroInt Double
e IOArray (ZeroInt, ZeroInt) (Complex Double)
z Int
lwork Int
lrwork 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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
lrwork])
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 Double
dPtr <- IOArray ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
lrworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
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 Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stedc Ptr CChar
compzPtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
lrworkPtr 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 Double ->
IOArray ZeroInt Double ->
Double ->
Double ->
Int ->
Int ->
Double ->
Int ->
Int ->
Int ->
Int ->
IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
stegr :: Char
-> Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> Int
-> Int
-> Int
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
stegr Char
jobz Char
range IOArray ZeroInt Double
d IOArray ZeroInt Double
e Double
vl Double
vu Int
il Int
iu Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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 Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr Double
vlPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vl
Ptr Double
vuPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
Ptr Double
abstolPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
abstol
Ptr CInt
mPtr <- FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stegr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Double
abstolPtr Ptr CInt
mPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr CInt
isuppzPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO Int
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Array ZeroInt CInt
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO Int
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double ->
Array ZeroInt Double ->
Int ->
Array ZeroInt Double ->
Array ZeroInt CInt ->
Array ZeroInt CInt ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Int)
stein :: Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
stein Array ZeroInt Double
d Array ZeroInt Double
e Int
m Array ZeroInt Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
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) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
m Int
ldz
IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
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) (Complex Double), Array ZeroInt CInt,
Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
d
Ptr Double
ePtr <- Array ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
e
Ptr CInt
mPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr Double
wPtr <- Array ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
w
Ptr CInt
iblockPtr <- Array ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), 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 (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), 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) (Complex Double), Array ZeroInt CInt,
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stein Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr CInt
mPtr Ptr Double
wPtr Ptr CInt
iblockPtr Ptr CInt
isplitPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Array ZeroInt CInt
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Int))
-> IO (Array ZeroInt CInt)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double), Array ZeroInt CInt,
Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), 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 Double ->
IOArray ZeroInt Double ->
Double ->
Double ->
Int ->
Int ->
Int ->
Int ->
Int ->
Bool ->
Int ->
Int ->
IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array ZeroInt CInt, Bool, Int)
stemr :: Char
-> Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Double
-> Double
-> Int
-> Int
-> Int
-> Int
-> Int
-> Bool
-> Int
-> Int
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
stemr Char
jobz Char
range IOArray ZeroInt Double
d IOArray ZeroInt Double
e Double
vl Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray (ZeroInt, ZeroInt) (Complex Double)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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 Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int))
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobzPtr <- Char
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr Double
vlPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vl
Ptr Double
vuPtr <- Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
(Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vu
Ptr CInt
ilPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
tryrac
Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
IO
()
forall a.
IO a
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
IO
())
-> IO ()
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Bool
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stemr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr CInt
mPtr Ptr Double
wPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr CInt
nzcPtr Ptr CInt
isuppzPtr Ptr Bool
tryracPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
forall a.
IO a
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int))
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
-> ContT
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int)
forall a b. (a -> b) -> a -> b
$ (Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int))
-> IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int))
-> IO Int
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
w
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
IO
(Array ZeroInt CInt
-> Bool
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int))
-> IO (Array ZeroInt CInt)
-> IO
(Bool
-> Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int))
-> IO Bool
-> IO
(Int
-> (Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double,
Array (ZeroInt, ZeroInt) (Complex Double), Array ZeroInt CInt,
Bool, Int))
-> IO Int
-> IO
(Int, Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double ->
IOArray ZeroInt Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
steqr :: Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
steqr Char
compz IOArray ZeroInt Double
d IOArray ZeroInt Double
e IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
work <- Int -> IO (IOArray ZeroInt Double)
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 Double
dPtr <- IOArray ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
Ptr Double
ePtr <- IOArray ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
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 Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.steqr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr Double
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)
sum1 ::
Array ZeroInt (Complex Double) ->
Int ->
IO Double
sum1 :: Array ZeroInt (Complex Double) -> Int -> IO Double
sum1 Array ZeroInt (Complex Double)
cx Int
incx = do
let cxDim0 :: Int
cxDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
cx
let n :: Int
n = Int
cxDim0
ContT Double IO Double -> IO Double
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Double IO Double -> IO Double)
-> ContT Double IO Double -> IO Double
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
nPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
cxPtr <- Array ZeroInt (Complex Double)
-> FortranIO Double (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
cx
Ptr CInt
incxPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
IO Double -> ContT Double IO Double
forall a. IO a -> ContT Double IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> ContT Double IO Double)
-> IO Double -> ContT Double IO Double
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr (Complex Double) -> Ptr CInt -> IO Double
FFI.sum1 Ptr CInt
nPtr Ptr (Complex Double)
cxPtr Ptr CInt
incxPtr
sycon ::
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt CInt ->
Double ->
IO (Double, Int)
sycon :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Double
-> IO (Double, Int)
sycon Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt CInt
ipiv Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Double, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr Double
anormPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
anorm
Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.sycon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
syconv ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt CInt ->
IO (Array ZeroInt (Complex Double), Int)
syconv :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> IO (Array ZeroInt (Complex Double), Int)
syconv Char
uplo Char
way IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
e <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
wayPtr <- Char -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
way
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr (Complex Double)
ePtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
e
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.syconv Ptr CChar
uploPtr Ptr CChar
wayPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
ePtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
e
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
syequb ::
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Double, Double, Int)
syequb :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Double, Double, Int)
syequb Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt Double
s <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int))
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr Double
scondPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
amaxPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Double, Double, Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ()
forall a.
IO a -> ContT (Array ZeroInt Double, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ())
-> IO () -> ContT (Array ZeroInt Double, Double, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.syequb Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
amaxPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
forall a.
IO a -> ContT (Array ZeroInt Double, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int))
-> IO (Array ZeroInt Double, Double, Double, Int)
-> ContT
(Array ZeroInt Double, Double, Double, Int)
IO
(Array ZeroInt Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
-> IO
(Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Double
-> Double
-> Double
-> Int
-> (Array ZeroInt Double, Double, Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Double
-> Double -> Int -> (Array ZeroInt Double, Double, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
s
IO
(Double
-> Double -> Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Double
-> IO
(Double -> Int -> (Array ZeroInt Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
scondPtr
IO (Double -> Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Double
-> IO (Int -> (Array ZeroInt Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
amaxPtr
IO (Int -> (Array ZeroInt Double, Double, Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Double, 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)
symv ::
Char ->
Complex Double ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
Int ->
Complex Double ->
IOArray ZeroInt (Complex Double) ->
Int ->
IO ()
symv :: Char
-> Complex Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> Complex Double
-> IOArray ZeroInt (Complex Double)
-> Int
-> IO ()
symv Char
uplo Complex Double
alpha Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
x Int
incx Complex Double
beta IOArray ZeroInt (Complex Double)
y Int
incy = 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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
$ Array ZeroInt (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
y
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let _xSize :: Int
_xSize = Int
xDim0
let _ySize :: Int
_ySize = Int
yDim0
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 (Complex Double)
alphaPtr <- Complex Double -> FortranIO () (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
alpha
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
xPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
x
Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr (Complex Double)
betaPtr <- Complex Double -> FortranIO () (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
beta
Ptr (Complex Double)
yPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
y
Ptr CInt
incyPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.symv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
alphaPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
xPtr Ptr CInt
incxPtr Ptr (Complex Double)
betaPtr Ptr (Complex Double)
yPtr Ptr CInt
incyPtr
syr ::
Char ->
Complex Double ->
Array ZeroInt (Complex Double) ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO ()
syr :: Char
-> Complex Double
-> Array ZeroInt (Complex Double)
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO ()
syr Char
uplo Complex Double
alpha Array ZeroInt (Complex Double)
x Int
incx IOArray (ZeroInt, ZeroInt) (Complex Double)
a = 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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
x
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let _xSize :: Int
_xSize = Int
xDim0
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 (Complex Double)
alphaPtr <- Complex Double -> FortranIO () (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
alpha
Ptr (Complex Double)
xPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
x
Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.syr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
alphaPtr Ptr (Complex Double)
xPtr Ptr CInt
incxPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr
syrfs ::
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt CInt ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
syrfs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
syrfs Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
a Array (ZeroInt, ZeroInt) (Complex Double)
af Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
afPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
af
Ptr CInt
ldafPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.syrfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
sysv ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt CInt, Int)
sysv :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt CInt, Int)
sysv Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sysv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray ZeroInt CInt ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Double, Array ZeroInt Double, Array ZeroInt Double, Int)
sysvx :: Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
sysvx Char
fact Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
af IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
IOArray ZeroInt Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
factPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
afPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
af
Ptr CInt
ldafPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
rcondPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.sysvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
x
IO
(Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO
(Int
-> (Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double), Double,
Array ZeroInt Double, Array 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)
syswapr ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO ()
syswapr :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO ()
syswapr Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.syswapr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
i1Ptr Ptr CInt
i2Ptr
sytf2 ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt CInt, Int)
sytf2 :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt CInt, Int)
sytf2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
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)
sytrf ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt CInt, Int)
sytrf :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt CInt, Int)
sytrf Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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) (Complex Double) ->
Array ZeroInt CInt ->
IO (Int)
sytri :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> IO Int
sytri Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.sytri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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) (Complex Double) ->
Array ZeroInt CInt ->
Int ->
Int ->
IO (Int)
sytri2 :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> Int
-> IO Int
sytri2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytri2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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) (Complex Double) ->
Array ZeroInt CInt ->
Int ->
IO (Int)
sytri2x :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> Int
-> IO Int
sytri2x Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double)
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
workPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytri2x Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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) (Complex Double) ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
sytrs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
sytrs Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
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) (Complex Double) ->
Array ZeroInt CInt ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
sytrs2 :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
sytrs2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.sytrs2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
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) (Complex Double) ->
IO (Double, Int)
tbcon :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IO (Double, Int)
tbcon Char
norm Char
uplo Char
diag Int
kd Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
ab
let n :: Int
n = Int
abDim0
let ldab :: Int
ldab = Int
abDim1
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.tbcon Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr Double
rcondPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
tbrfs ::
Char ->
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
tbrfs :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
tbrfs Char
uplo Char
trans Char
diag Int
kd Array (ZeroInt, ZeroInt) (Complex Double)
ab Array (ZeroInt, ZeroInt) (Complex Double)
b Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kdPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.tbrfs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
tbtrs ::
Char ->
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
tbtrs :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
tbtrs Char
uplo Char
trans Char
diag Int
kd Array (ZeroInt, ZeroInt) (Complex Double)
ab IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
ab
Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> 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 (Complex Double)
abPtr Ptr CInt
ldabPtr Ptr (Complex Double)
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 ->
Complex Double ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO ()
tfsm :: Char
-> Char
-> Char
-> Char
-> Char
-> Int
-> Complex Double
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO ()
tfsm Char
transr Char
side Char
uplo Char
trans Char
diag Int
m Complex Double
alpha Array ZeroInt (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
b
let n :: Int
n = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
String -> Bool -> IO ()
Call.assert String
"tfsm: 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 () 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 (Complex Double)
alphaPtr <- Complex Double -> FortranIO () (Ptr (Complex Double))
forall r. Complex Double -> FortranIO r (Ptr (Complex Double))
Call.complexDouble Complex Double
alpha
Ptr (Complex Double)
aPtr <- Array ZeroInt (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
a
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO () (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> 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 (Complex Double)
alphaPtr Ptr (Complex Double)
aPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr
tftri ::
Char ->
Char ->
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
IO (Int)
tftri :: Char
-> Char
-> Char
-> Int
-> IOArray ZeroInt (Complex Double)
-> IO Int
tftri Char
transr Char
uplo Char
diag Int
n IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
a
String -> Bool -> IO ()
Call.assert String
"tftri: 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 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 (Complex Double)
aPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> IO ()
FFI.tftri Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr (Complex Double)
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 (Complex Double) ->
IO (Array ZeroInt (Complex Double), Int)
tfttp :: Char
-> Char
-> Int
-> Array ZeroInt (Complex Double)
-> IO (Array ZeroInt (Complex Double), Int)
tfttp Char
transr Char
uplo Int
n Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double)
ap <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transrPtr <- Char -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
arfPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
arf
Ptr (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.tfttp Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
arfPtr Ptr (Complex Double)
apPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
ap
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
tfttr ::
Char ->
Char ->
Int ->
Array ZeroInt (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)
tfttr :: Char
-> Char
-> Int
-> Array ZeroInt (Complex Double)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
tfttr Char
transr Char
uplo Int
n Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double)
a <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
lda
ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transrPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
arfPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
arf
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tfttr Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
arfPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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)
tgevc ::
Char ->
Char ->
Array ZeroInt Bool ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int, Int)
tgevc :: Char
-> Char
-> Array ZeroInt Bool
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Int, Int)
tgevc Char
side Char
howmny Array ZeroInt Bool
select Array (ZeroInt, ZeroInt) (Complex Double)
s Array (ZeroInt, ZeroInt) (Complex Double)
p IOArray (ZeroInt, ZeroInt) (Complex Double)
vl IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
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, 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 (Complex Double)
sPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
s
Ptr CInt
ldsPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lds
Ptr (Complex Double)
pPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
p
Ptr CInt
ldpPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldp
Ptr (Complex Double)
vlPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vl
Ptr CInt
ldvlPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr (Complex Double)
vrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.tgevc Ptr CChar
sidePtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr (Complex Double)
sPtr Ptr CInt
ldsPtr Ptr (Complex Double)
pPtr Ptr CInt
ldpPtr Ptr (Complex Double)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Double)
vrPtr Ptr CInt
ldvrPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr 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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
tgex2 :: Bool
-> Bool
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
tgex2 Bool
wantq Bool
wantz IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
q IOArray (ZeroInt, ZeroInt) (Complex Double)
z Int
j1 = 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
z
let _aSize :: Int
_aSize = Int
aDim0
let lda :: Int
lda = Int
aDim1
let _bSize :: Int
_bSize = Int
bDim0
let ldb :: Int
ldb = Int
bDim1
let n :: Int
n = Int
qDim0
let ldq :: Int
ldq = Int
qDim1
let ldz :: Int
ldz = Int
zDim1
String -> Bool -> IO ()
Call.assert String
"tgex2: 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 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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgex2 Ptr Bool
wantqPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr CInt
j1Ptr 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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO (Int, Int)
tgexc :: Bool
-> Bool
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO (Int, Int)
tgexc Bool
wantq Bool
wantz IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
q IOArray (ZeroInt, ZeroInt) (Complex Double)
z Int
ifst Int
ilst = 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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)
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 Bool
wantqPtr <- Bool -> FortranIO (Int, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantq
Ptr Bool
wantzPtr <- Bool -> FortranIO (Int, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
ifstPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ifst
Ptr CInt
ilstPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilst
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 Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgexc Ptr Bool
wantqPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr CInt
ifstPtr Ptr CInt
ilstPtr 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
ilstPtr)
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)
tgsen ::
Int ->
Bool ->
Bool ->
Array ZeroInt Bool ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int, Double, Double, Array ZeroInt Double, Int)
tgsen :: Int
-> Bool
-> Bool
-> Array ZeroInt Bool
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
tgsen Int
ijob Bool
wantq Bool
wantz Array ZeroInt Bool
select IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
q IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
alpha <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
beta <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
dif <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
ijobPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
Ptr Bool
wantqPtr <- Bool
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantq
Ptr Bool
wantzPtr <- Bool
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
Ptr Bool
selectPtr <- Array ZeroInt Bool
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, 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 (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
alphaPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
alpha
Ptr (Complex Double)
betaPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
beta
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr (Complex Double)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
z
Ptr CInt
ldzPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
Ptr CInt
mPtr <- FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
plPtr <- FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
prPtr <- FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
difPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
dif
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, 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 (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Bool
-> Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> 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 (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
alphaPtr Ptr (Complex Double)
betaPtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr (Complex Double)
zPtr Ptr CInt
ldzPtr Ptr CInt
mPtr Ptr Double
plPtr Ptr Double
prPtr Ptr Double
difPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> Double
-> Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> Double
-> Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> Double
-> Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Int
-> Double
-> Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
alpha
IO
(Array ZeroInt (Complex Double)
-> Int
-> Double
-> Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Int
-> Double
-> Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
beta
IO
(Int
-> Double
-> Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Double
-> Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array 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
mPtr)
IO
(Double
-> Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
plPtr
IO
(Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
(Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
prPtr
IO
(Array ZeroInt Double
-> Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
dif
IO
(Int
-> (Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
(Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int, Double, Double, Array 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)
tgsja ::
Char ->
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Double ->
Double ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
tgsja :: Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Double
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
tgsja Char
jobu Char
jobv Char
jobq Int
k Int
l IOArray (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
b Double
tola Double
tolb IOArray (ZeroInt, ZeroInt) (Complex Double)
u IOArray (ZeroInt, ZeroInt) (Complex Double)
v IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 Double
alpha <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt Double
beta <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobuPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu
Ptr CChar
jobvPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv
Ptr CChar
jobqPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobq
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
pPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
kPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
Ptr CInt
lPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
l
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr Double
tolaPtr <- Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
tola
Ptr Double
tolbPtr <- Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
tolb
Ptr Double
alphaPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
alpha
Ptr Double
betaPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
beta
Ptr (Complex Double)
uPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
u
Ptr CInt
lduPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
Ptr (Complex Double)
vPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
v
Ptr CInt
ldvPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
ncyclePtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) IO ()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, 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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> 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 (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr Double
tolaPtr Ptr Double
tolbPtr Ptr Double
alphaPtr Ptr Double
betaPtr Ptr (Complex Double)
uPtr Ptr CInt
lduPtr Ptr (Complex Double)
vPtr Ptr CInt
ldvPtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr (Complex Double)
workPtr Ptr CInt
ncyclePtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
alpha
IO
(Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
beta
IO
(Int
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO Int
-> IO
(Int -> (Array ZeroInt Double, Array ZeroInt Double, 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 Double, Array ZeroInt Double, Int, Int))
-> IO Int
-> IO (Array ZeroInt Double, Array ZeroInt Double, 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) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
tgsna :: Char
-> Char
-> Array ZeroInt Bool
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
tgsna Char
job Char
howmny Array ZeroInt Bool
select Array (ZeroInt, ZeroInt) (Complex Double)
a Array (ZeroInt, ZeroInt) (Complex Double)
b Array (ZeroInt, ZeroInt) (Complex Double)
vl Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 Double
s <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
IOArray ZeroInt Double
dif <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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
2)
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CChar
howmnyPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
howmny
Ptr Bool
selectPtr <- Array ZeroInt Bool
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, 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 Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
vlPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
vl
Ptr CInt
ldvlPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr (Complex Double)
vrPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
vr
Ptr CInt
ldvrPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr Double
difPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
dif
Ptr CInt
mmPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mm
Ptr CInt
mPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, 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 Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) IO ()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgsna Ptr CChar
jobPtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Double)
vrPtr Ptr CInt
ldvrPtr Ptr Double
sPtr Ptr Double
difPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
s
IO
(Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
dif
IO
(Int
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO Int
-> IO
(Int -> (Array ZeroInt Double, Array ZeroInt Double, 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 Double, Array ZeroInt Double, Int, Int))
-> IO Int
-> IO (Array ZeroInt Double, Array ZeroInt Double, 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) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Double ->
Double ->
IO (Double, Double, Double, Int)
tgsy2 :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Double
-> Double
-> IO (Double, Double, Double, Int)
tgsy2 Char
trans Int
ijob Array (ZeroInt, ZeroInt) (Complex Double)
a Array (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
c Array (ZeroInt, ZeroInt) (Complex Double)
d Array (ZeroInt, ZeroInt) (Complex Double)
e IOArray (ZeroInt, ZeroInt) (Complex Double)
f Double
rdsum Double
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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)
ContT
(Double, Double, Double, Int) IO (Double, Double, Double, Int)
-> IO (Double, Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Double, Double, Double, Int) IO (Double, Double, Double, Int)
-> IO (Double, Double, Double, Int))
-> ContT
(Double, Double, Double, Int) IO (Double, Double, Double, Int)
-> IO (Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char -> FortranIO (Double, Double, Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
ijobPtr <- Int -> FortranIO (Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
Ptr CInt
mPtr <- Int -> FortranIO (Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO (Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
dPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
d
Ptr CInt
lddPtr <- Int -> FortranIO (Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldd
Ptr (Complex Double)
ePtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
e
Ptr CInt
ldePtr <- Int -> FortranIO (Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lde
Ptr (Complex Double)
fPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
f
Ptr CInt
ldfPtr <- Int -> FortranIO (Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldf
Ptr Double
scalePtr <- FortranIO (Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
rdsumPtr <- Double -> FortranIO (Double, Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rdsum
Ptr Double
rdscalPtr <- Double -> FortranIO (Double, Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rdscal
Ptr CInt
infoPtr <- FortranIO (Double, Double, Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Double, Double, Int) IO ()
forall a. IO a -> ContT (Double, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Double, Double, Int) IO ())
-> IO () -> ContT (Double, Double, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.tgsy2 Ptr CChar
transPtr Ptr CInt
ijobPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
dPtr Ptr CInt
lddPtr Ptr (Complex Double)
ePtr Ptr CInt
ldePtr Ptr (Complex Double)
fPtr Ptr CInt
ldfPtr Ptr Double
scalePtr Ptr Double
rdsumPtr Ptr Double
rdscalPtr Ptr CInt
infoPtr
IO (Double, Double, Double, Int)
-> ContT
(Double, Double, Double, Int) IO (Double, Double, Double, Int)
forall a. IO a -> ContT (Double, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double, Double, Int)
-> ContT
(Double, Double, Double, Int) IO (Double, Double, Double, Int))
-> IO (Double, Double, Double, Int)
-> ContT
(Double, Double, Double, Int) IO (Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double
-> Double -> Double -> Int -> (Double, Double, Double, Int))
-> IO
(Double
-> Double -> Double -> Int -> (Double, Double, Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Double
-> Double -> Double -> Int -> (Double, Double, Double, Int))
-> IO Double
-> IO (Double -> Double -> Int -> (Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
scalePtr
IO (Double -> Double -> Int -> (Double, Double, Double, Int))
-> IO Double -> IO (Double -> Int -> (Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rdsumPtr
IO (Double -> Int -> (Double, Double, Double, Int))
-> IO Double -> IO (Int -> (Double, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rdscalPtr
IO (Int -> (Double, Double, Double, Int))
-> IO Int -> IO (Double, Double, 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)
tgsyl ::
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Double, Double, Int)
tgsyl :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Double, Double, Int)
tgsyl Char
trans Int
ijob Array (ZeroInt, ZeroInt) (Complex Double)
a Array (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
c Array (ZeroInt, ZeroInt) (Complex Double)
d Array (ZeroInt, ZeroInt) (Complex Double)
e IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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
2)
ContT (Double, Double, Int) IO (Double, Double, Int)
-> IO (Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Double, Int) IO (Double, Double, Int)
-> IO (Double, Double, Int))
-> ContT (Double, Double, Int) IO (Double, Double, Int)
-> IO (Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char -> FortranIO (Double, Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CInt
ijobPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
Ptr CInt
mPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
dPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
d
Ptr CInt
lddPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldd
Ptr (Complex Double)
ePtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
e
Ptr CInt
ldePtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lde
Ptr (Complex Double)
fPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
f
Ptr CInt
ldfPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldf
Ptr Double
scalePtr <- FortranIO (Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
difPtr <- FortranIO (Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Double, Double, 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 (Double, Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Double, Int) IO ()
forall a. IO a -> ContT (Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Double, Int) IO ())
-> IO () -> ContT (Double, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgsyl Ptr CChar
transPtr Ptr CInt
ijobPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
dPtr Ptr CInt
lddPtr Ptr (Complex Double)
ePtr Ptr CInt
ldePtr Ptr (Complex Double)
fPtr Ptr CInt
ldfPtr Ptr Double
scalePtr Ptr Double
difPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO (Double, Double, Int)
-> ContT (Double, Double, Int) IO (Double, Double, Int)
forall a. IO a -> ContT (Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double, Int)
-> ContT (Double, Double, Int) IO (Double, Double, Int))
-> IO (Double, Double, Int)
-> ContT (Double, Double, Int) IO (Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Double -> Int -> (Double, Double, Int))
-> IO (Double -> Double -> Int -> (Double, Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO (Double -> Double -> Int -> (Double, Double, Int))
-> IO Double -> IO (Double -> Int -> (Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
scalePtr
IO (Double -> Int -> (Double, Double, Int))
-> IO Double -> IO (Int -> (Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
difPtr
IO (Int -> (Double, Double, Int))
-> IO Int -> IO (Double, 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)
tpcon ::
Char ->
Char ->
Char ->
Int ->
Array ZeroInt (Complex Double) ->
IO (Double, Int)
tpcon :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt (Complex Double)
-> IO (Double, Int)
tpcon Char
norm Char
uplo Char
diag Int
n Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.tpcon Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr Double
rcondPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
tprfs ::
Char ->
Char ->
Char ->
Int ->
Array ZeroInt (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
tprfs :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
tprfs Char
uplo Char
trans Char
diag Int
n Array ZeroInt (Complex Double)
ap Array (ZeroInt, ZeroInt) (Complex Double)
b Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.tprfs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
tptri ::
Char ->
Char ->
Int ->
IOArray ZeroInt (Complex Double) ->
IO (Int)
tptri :: Char -> Char -> Int -> IOArray ZeroInt (Complex Double) -> IO Int
tptri Char
uplo Char
diag Int
n IOArray ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Double)
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 (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> IO ()
FFI.tptri Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr (Complex Double)
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 (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
tptrs :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
tptrs Char
uplo Char
trans Char
diag Int
n Array ZeroInt (Complex Double)
ap IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tptrs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
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 (Complex Double) ->
IO (Array ZeroInt (Complex Double), Int)
tpttf :: Char
-> Char
-> Int
-> Array ZeroInt (Complex Double)
-> IO (Array ZeroInt (Complex Double), Int)
tpttf Char
transr Char
uplo Int
n Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double)
arf <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transrPtr <- Char -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr (Complex Double)
arfPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
arf
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.tpttf Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
arfPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
arf
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
tpttr ::
Char ->
Int ->
Array ZeroInt (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)
tpttr :: Char
-> Int
-> Array ZeroInt (Complex Double)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
tpttr Char
uplo Int
n Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double)
a <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
lda
ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tpttr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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)
trcon ::
Char ->
Char ->
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO (Double, Int)
trcon :: Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IO (Double, Int)
trcon Char
norm Char
uplo Char
diag Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
normPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
Ptr CChar
uploPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
diagPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.trcon Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr Double
rcondPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
rcondPtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
trevc ::
Char ->
Char ->
Array ZeroInt Bool ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int, Int)
trevc :: Char
-> Char
-> Array ZeroInt Bool
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Int, Int)
trevc Char
side Char
howmny Array ZeroInt Bool
select IOArray (ZeroInt, ZeroInt) (Complex Double)
t IOArray (ZeroInt, ZeroInt) (Complex Double)
vl IOArray (ZeroInt, ZeroInt) (Complex Double)
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
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 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 (Complex Double)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
t
Ptr CInt
ldtPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr (Complex Double)
vlPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
vl
Ptr CInt
ldvlPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr (Complex Double)
vrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO (Int, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double -> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.trevc Ptr CChar
sidePtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr (Complex Double)
tPtr Ptr CInt
ldtPtr Ptr (Complex Double)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Double)
vrPtr Ptr CInt
ldvrPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr 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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO (Int)
trexc :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO Int
trexc Char
compq IOArray (ZeroInt, ZeroInt) (Complex Double)
t IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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)
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 CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
t
Ptr CInt
ldtPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr CInt
ifstPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ifst
Ptr CInt
ilstPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilst
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trexc Ptr CChar
compqPtr Ptr CInt
nPtr Ptr (Complex Double)
tPtr Ptr CInt
ldtPtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr CInt
ifstPtr Ptr CInt
ilstPtr 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)
trrfs ::
Char ->
Char ->
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
trrfs :: Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
trrfs Char
uplo Char
trans Char
diag Array (ZeroInt, ZeroInt) (Complex Double)
a Array (ZeroInt, ZeroInt) (Complex Double)
b Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 Double
ferr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt Double
berr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
diagPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
Ptr CInt
nPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr CInt
nrhsPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
xPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
x
Ptr CInt
ldxPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
Ptr Double
ferrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
ferr
Ptr Double
berrPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
berr
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.trrfs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr (Complex Double)
workPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a.
IO a
-> ContT (Array ZeroInt Double, Array ZeroInt Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
ferr
IO
(Array ZeroInt Double
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Int -> (Array ZeroInt Double, Array 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
berr
IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array 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)
trsen ::
Char ->
Char ->
Array ZeroInt Bool ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt (Complex Double), Int, Double, Double, Int)
trsen :: Char
-> Char
-> Array ZeroInt Bool
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt (Complex Double), Int, Double, Double, Int)
trsen Char
job Char
compq Array ZeroInt Bool
select IOArray (ZeroInt, ZeroInt) (Complex Double)
t IOArray (ZeroInt, ZeroInt) (Complex Double)
q 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
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
w <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Int, Double, Double, Int)
IO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
-> IO (Array ZeroInt (Complex Double), Int, Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
IO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
-> IO (Array ZeroInt (Complex Double), Int, Double, Double, Int))
-> ContT
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
IO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
-> IO (Array ZeroInt (Complex Double), Int, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CChar
compqPtr <- Char
-> FortranIO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compq
Ptr Bool
selectPtr <- Array ZeroInt Bool
-> FortranIO
(Array ZeroInt (Complex Double), Int, Double, Double, 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 (Complex Double), Int, Double, Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
t
Ptr CInt
ldtPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr (Complex Double)
wPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
w
Ptr CInt
mPtr <- FortranIO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
sPtr <- FortranIO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr Double
sepPtr <- FortranIO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
(Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt (Complex Double), Int, Double, Double, Int) IO ()
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Int, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt (Complex Double), Int, Double, Double, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt (Complex Double), Int, Double, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trsen Ptr CChar
jobPtr Ptr CChar
compqPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr (Complex Double)
tPtr Ptr CInt
ldtPtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr (Complex Double)
wPtr Ptr CInt
mPtr Ptr Double
sPtr Ptr Double
sepPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int, Double, Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
IO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
forall a.
IO a
-> ContT
(Array ZeroInt (Complex Double), Int, Double, Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int, Double, Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
IO
(Array ZeroInt (Complex Double), Int, Double, Double, Int))
-> IO (Array ZeroInt (Complex Double), Int, Double, Double, Int)
-> ContT
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
IO
(Array ZeroInt (Complex Double), Int, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int
-> Double
-> Double
-> Int
-> (Array ZeroInt (Complex Double), Int, Double, Double, Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int
-> Double
-> Double
-> Int
-> (Array ZeroInt (Complex Double), Int, Double, Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
IO
(Array ZeroInt (Complex Double)
-> Int
-> Double
-> Double
-> Int
-> (Array ZeroInt (Complex Double), Int, Double, Double, Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Int
-> Double
-> Double
-> Int
-> (Array ZeroInt (Complex Double), Int, Double, 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
w
IO
(Int
-> Double
-> Double
-> Int
-> (Array ZeroInt (Complex Double), Int, Double, Double, Int))
-> IO Int
-> IO
(Double
-> Double
-> Int
-> (Array ZeroInt (Complex Double), Int, Double, 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
mPtr)
IO
(Double
-> Double
-> Int
-> (Array ZeroInt (Complex Double), Int, Double, Double, Int))
-> IO Double
-> IO
(Double
-> Int
-> (Array ZeroInt (Complex Double), Int, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
sPtr
IO
(Double
-> Int
-> (Array ZeroInt (Complex Double), Int, Double, Double, Int))
-> IO Double
-> IO
(Int -> (Array ZeroInt (Complex Double), Int, Double, 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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
sepPtr
IO
(Int -> (Array ZeroInt (Complex Double), Int, Double, Double, Int))
-> IO Int
-> IO (Array ZeroInt (Complex Double), Int, Double, 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)
trsna ::
Char ->
Char ->
Array ZeroInt Bool ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
trsna :: Char
-> Char
-> Array ZeroInt Bool
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
trsna Char
job Char
howmny Array ZeroInt Bool
select Array (ZeroInt, ZeroInt) (Complex Double)
t Array (ZeroInt, ZeroInt) (Complex Double)
vl Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 Double
s <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
IOArray ZeroInt Double
sep <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
IOArray (ZeroInt, ZeroInt) (Complex Double)
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
Ptr CChar
howmnyPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
howmny
Ptr Bool
selectPtr <- Array ZeroInt Bool
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, 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 Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
tPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
t
Ptr CInt
ldtPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
Ptr (Complex Double)
vlPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
vl
Ptr CInt
ldvlPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
Ptr (Complex Double)
vrPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
vr
Ptr CInt
ldvrPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
Ptr Double
sepPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
sep
Ptr CInt
mmPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mm
Ptr CInt
mPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr (Complex Double)
workPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
work
Ptr CInt
ldworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) IO ()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) IO ())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.trsna Ptr CChar
jobPtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr (Complex Double)
tPtr Ptr CInt
ldtPtr Ptr (Complex Double)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Double)
vrPtr Ptr CInt
ldvrPtr Ptr Double
sPtr Ptr Double
sepPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr (Complex Double)
workPtr Ptr CInt
ldworkPtr Ptr Double
rworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
IO
(Array ZeroInt Double, Array ZeroInt Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
s
IO
(Array ZeroInt Double
-> Int
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO (Array ZeroInt Double)
-> IO
(Int
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
sep
IO
(Int
-> Int -> (Array ZeroInt Double, Array ZeroInt Double, Int, Int))
-> IO Int
-> IO
(Int -> (Array ZeroInt Double, Array ZeroInt Double, 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 Double, Array ZeroInt Double, Int, Int))
-> IO Int
-> IO (Array ZeroInt Double, Array ZeroInt Double, 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) (Complex Double) ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Double, Int)
trsyl :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO (Double, Int)
trsyl Char
trana Char
tranb Int
isgn Array (ZeroInt, ZeroInt) (Complex Double)
a Array (ZeroInt, ZeroInt) (Complex Double)
b IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int) IO (Double, Int) -> IO (Double, Int))
-> ContT (Double, Int) IO (Double, Int) -> IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
tranaPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trana
Ptr CChar
tranbPtr <- Char -> FortranIO (Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
tranb
Ptr CInt
isgnPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
isgn
Ptr CInt
mPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
b
Ptr CInt
ldbPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO (Double, Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr Double
scalePtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
Ptr CInt
infoPtr <- FortranIO (Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Double, Int) IO ()
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int) IO ())
-> IO () -> ContT (Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.trsyl Ptr CChar
tranaPtr Ptr CChar
tranbPtr Ptr CInt
isgnPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
bPtr Ptr CInt
ldbPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr Double
scalePtr Ptr CInt
infoPtr
IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a. IO a -> ContT (Double, Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int) -> ContT (Double, Int) IO (Double, Int))
-> IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> (Double, Int))
-> IO (Double -> Int -> (Double, Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (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
<*> Ptr Double -> IO Double
forall a. Storable a => Ptr a -> IO a
peek Ptr Double
scalePtr
IO (Int -> (Double, Int)) -> IO Int -> IO (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)
trti2 ::
Char ->
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
trti2 :: Char
-> Char -> IOArray (ZeroInt, ZeroInt) (Complex Double) -> IO Int
trti2 Char
uplo Char
diag IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trti2 Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr (Complex Double)
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) (Complex Double) ->
IO (Int)
trtri :: Char
-> Char -> IOArray (ZeroInt, ZeroInt) (Complex Double) -> IO Int
trtri Char
uplo Char
diag IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trtri Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr (Complex Double)
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) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IO (Int)
trtrs :: Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IO Int
trtrs Char
uplo Char
trans Char
diag Array (ZeroInt, ZeroInt) (Complex Double)
a IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trtrs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
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) (Complex Double) ->
IO (Array ZeroInt (Complex Double), Int)
trttf :: Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt (Complex Double), Int)
trttf Char
transr Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
arf <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transrPtr <- Char -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
arfPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
arf
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.trttf Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
arfPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
arf
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
trttp ::
Char ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
IO (Array ZeroInt (Complex Double), Int)
trttp :: Char
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> IO (Array ZeroInt (Complex Double), Int)
trttp Char
uplo Array (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
ap <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
apPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
ap
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.trttp Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
apPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
ap
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
tzrzf ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt (Complex Double), Int)
tzrzf :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO (Array ZeroInt (Complex Double), Int)
tzrzf Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
a
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
IOArray ZeroInt (Complex Double)
tau <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int))
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
-> IO (Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt (Complex Double), Int) (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tzrzf Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a. IO a -> ContT (Array ZeroInt (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double), Int)
-> ContT
(Array ZeroInt (Complex Double), Int)
IO
(Array ZeroInt (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array ZeroInt (Complex Double)
-> Int -> (Array ZeroInt (Complex Double), Int))
-> IO (Array ZeroInt (Complex Double))
-> IO (Int -> (Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tau
IO (Int -> (Array ZeroInt (Complex Double), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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)
unbdb ::
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Array ZeroInt (Complex Double), Int)
unbdb :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
unbdb Char
trans Char
signs Int
m Int
p IOArray (ZeroInt, ZeroInt) (Complex Double)
x11 IOArray (ZeroInt, ZeroInt) (Complex Double)
x12 IOArray (ZeroInt, ZeroInt) (Complex Double)
x21 IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"unbdb: 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
"unbdb: q == x21Dim0" (Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x21Dim0)
String -> Bool -> IO ()
Call.assert String
"unbdb: 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 Double
theta <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
IOArray ZeroInt Double
phi <- Int -> IO (IOArray ZeroInt Double)
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 (Complex Double)
taup1 <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
p
IOArray ZeroInt (Complex Double)
taup2 <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
tauq1 <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
IOArray ZeroInt (Complex Double)
tauq2 <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
signsPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
signs
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
pPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr CInt
qPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
q
Ptr (Complex Double)
x11Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x11
Ptr CInt
ldx11Ptr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx11
Ptr (Complex Double)
x12Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x12
Ptr CInt
ldx12Ptr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx12
Ptr (Complex Double)
x21Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x21
Ptr CInt
ldx21Ptr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx21
Ptr (Complex Double)
x22Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x22
Ptr CInt
ldx22Ptr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx22
Ptr Double
thetaPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
theta
Ptr Double
phiPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
phi
Ptr (Complex Double)
taup1Ptr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
taup1
Ptr (Complex Double)
taup2Ptr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
taup2
Ptr (Complex Double)
tauq1Ptr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tauq1
Ptr (Complex Double)
tauq2Ptr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
tauq2
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr CInt
infoPtr <- FortranIO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unbdb Ptr CChar
transPtr Ptr CChar
signsPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
qPtr Ptr (Complex Double)
x11Ptr Ptr CInt
ldx11Ptr Ptr (Complex Double)
x12Ptr Ptr CInt
ldx12Ptr Ptr (Complex Double)
x21Ptr Ptr CInt
ldx21Ptr Ptr (Complex Double)
x22Ptr Ptr CInt
ldx22Ptr Ptr Double
thetaPtr Ptr Double
phiPtr Ptr (Complex Double)
taup1Ptr Ptr (Complex Double)
taup2Ptr Ptr (Complex Double)
tauq1Ptr Ptr (Complex Double)
tauq2Ptr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
-> ContT
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
IO
(Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
theta
IO
(Array ZeroInt Double
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt Double)
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
phi
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
taup1
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
taup2
IO
(Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tauq1
IO
(Array ZeroInt (Complex Double)
-> Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO (Array ZeroInt (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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 (Complex Double)
-> IO (Array ZeroInt (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Double)
tauq2
IO
(Int
-> (Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array ZeroInt Double,
Array ZeroInt (Complex Double), Array ZeroInt (Complex Double),
Array ZeroInt (Complex Double), Array ZeroInt (Complex 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)
uncsd ::
Char ->
Char ->
Char ->
Char ->
Char ->
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
Int ->
IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Array (ZeroInt,ZeroInt) (Complex Double), Int)
uncsd :: Char
-> Char
-> Char
-> Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
uncsd Char
jobu1 Char
jobu2 Char
jobv1t Char
jobv2t Char
trans Char
signs Int
m Int
p IOArray (ZeroInt, ZeroInt) (Complex Double)
x11 IOArray (ZeroInt, ZeroInt) (Complex Double)
x12 IOArray (ZeroInt, ZeroInt) (Complex Double)
x21 IOArray (ZeroInt, ZeroInt) (Complex Double)
x22 Int
r Int
ldu1 Int
ldu2 Int
ldv1t Int
ldv2t Int
lwork Int
rworkSize Int
lrwork = 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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"uncsd: 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
"uncsd: q == x21Dim0" (Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x21Dim0)
String -> Bool -> IO ()
Call.assert String
"uncsd: 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 Double
theta <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
r
IOArray (ZeroInt, ZeroInt) (Complex Double)
u1 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
p Int
ldu1
IOArray (ZeroInt, ZeroInt) (Complex Double)
u2 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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) (Complex Double)
v1t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
q Int
ldv1t
IOArray (ZeroInt, ZeroInt) (Complex Double)
v2t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 Double
rwork <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
jobu1Ptr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu1
Ptr CChar
jobu2Ptr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu2
Ptr CChar
jobv1tPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv1t
Ptr CChar
jobv2tPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv2t
Ptr CChar
transPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
Ptr CChar
signsPtr <- Char
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
signs
Ptr CInt
mPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
Ptr CInt
pPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
Ptr CInt
qPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
q
Ptr (Complex Double)
x11Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x11
Ptr CInt
ldx11Ptr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx11
Ptr (Complex Double)
x12Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x12
Ptr CInt
ldx12Ptr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx12
Ptr (Complex Double)
x21Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x21
Ptr CInt
ldx21Ptr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx21
Ptr (Complex Double)
x22Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
x22
Ptr CInt
ldx22Ptr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx22
Ptr Double
thetaPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
theta
Ptr (Complex Double)
u1Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
u1
Ptr CInt
ldu1Ptr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu1
Ptr (Complex Double)
u2Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
u2
Ptr CInt
ldu2Ptr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu2
Ptr (Complex Double)
v1tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
v1t
Ptr CInt
ldv1tPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv1t
Ptr (Complex Double)
v2tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
v2t
Ptr CInt
ldv2tPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv2t
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
lworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
Ptr Double
rworkPtr <- IOArray ZeroInt Double
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
rwork
Ptr CInt
lrworkPtr <- Int
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), 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 Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
()
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
())
-> IO ()
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), 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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.uncsd 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 (Complex Double)
x11Ptr Ptr CInt
ldx11Ptr Ptr (Complex Double)
x12Ptr Ptr CInt
ldx12Ptr Ptr (Complex Double)
x21Ptr Ptr CInt
ldx21Ptr Ptr (Complex Double)
x22Ptr Ptr CInt
ldx22Ptr Ptr Double
thetaPtr Ptr (Complex Double)
u1Ptr Ptr CInt
ldu1Ptr Ptr (Complex Double)
u2Ptr Ptr CInt
ldu2Ptr Ptr (Complex Double)
v1tPtr Ptr CInt
ldv1tPtr Ptr (Complex Double)
v2tPtr Ptr CInt
ldv2tPtr Ptr (Complex Double)
workPtr Ptr CInt
lworkPtr Ptr Double
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
IO
(Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array ZeroInt Double)
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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 Double -> IO (Array ZeroInt Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Double
theta
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
u1
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
u2
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
v1t
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
v2t
IO
(Int
-> (Array ZeroInt Double,
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int
-> IO
(Array ZeroInt Double, Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex Double),
Array (ZeroInt, ZeroInt) (Complex 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)
ung2l ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IO (Int)
ung2l :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IO Int
ung2l Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.ung2l Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
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)
ung2r ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IO (Int)
ung2r :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IO Int
ung2r Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.ung2r Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
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)
ungbr ::
Char ->
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
Int ->
IO (Int)
ungbr :: Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> IO Int
ungbr Char
vect Int
m Int
k IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let _tauSize :: Int
_tauSize = Int
tauDim0
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ungbr Ptr CChar
vectPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
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)
unghr ::
Int ->
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
Int ->
IO (Int)
unghr :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> IO Int
unghr Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"unghr: 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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unghr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
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)
ungl2 ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IO (Int)
ungl2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IO Int
ungl2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.ungl2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
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)
unglq ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
Int ->
IO (Int)
unglq :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> IO Int
unglq Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unglq Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
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)
ungql ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
Int ->
IO (Int)
ungql :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> IO Int
ungql Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ungql Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
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)
ungqr ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
Int ->
IO (Int)
ungqr :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> IO Int
ungqr Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ungqr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
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)
ungr2 ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IO (Int)
ungr2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IO Int
ungr2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.ungr2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
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)
ungrq ::
Int ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
Int ->
IO (Int)
ungrq :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> IO Int
ungrq Int
m IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
let k :: Int
k = Int
tauDim0
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ungrq Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
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)
ungtr ::
Char ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
Int ->
IO (Int)
ungtr :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> IO Int
ungtr Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
tau
let n :: Int
n = Int
aDim0
let lda :: Int
lda = Int
aDim1
String -> Bool -> IO ()
Call.assert String
"ungtr: 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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ungtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
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)
unm2l ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
unm2l :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
unm2l Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"unm2l: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.unm2l Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
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)
unm2r ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
unm2r :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
unm2r Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"unm2r: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.unm2r Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
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)
unmbr ::
Char ->
Char ->
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
unmbr :: Char
-> Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
unmbr Char
vect Char
side Char
trans Int
m Int
k Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"unmbr: minimum[nq,k] == tauDim0" Int
tauDim0
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmbr Ptr CChar
vectPtr Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
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)
unmhr ::
Char ->
Char ->
Int ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
unmhr :: Char
-> Char
-> Int
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
unmhr Char
side Char
trans Int
m Int
ilo Int
ihi Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmhr Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
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)
unml2 ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
unml2 :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
unml2 Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.unml2 Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
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)
unmlq ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
unmlq :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
unmlq Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmlq Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
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)
unmql ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
unmql :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
unmql Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"unmql: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmql Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
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)
unmqr ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
unmqr :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
unmqr Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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
"unmqr: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmqr Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
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)
unmr2 ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
unmr2 :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
unmr2 Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.unmr2 Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
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)
unmr3 ::
Char ->
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
unmr3 :: Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
unmr3 Char
side Char
trans Int
m Int
l Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.unmr3 Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
lPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
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)
unmrq ::
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
unmrq :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
unmrq Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmrq Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
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)
unmrz ::
Char ->
Char ->
Int ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
unmrz :: Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
unmrz Char
side Char
trans Int
m Int
l Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmrz Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
lPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
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)
unmtr ::
Char ->
Char ->
Char ->
Int ->
Array (ZeroInt,ZeroInt) (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
unmtr :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
unmtr Char
side Char
uplo Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Double)
a Array ZeroInt (Complex Double)
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Double)
a
Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmtr Ptr CChar
sidePtr Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
aPtr Ptr CInt
ldaPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
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)
upgtr ::
Char ->
Int ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
Int ->
IO (Array (ZeroInt,ZeroInt) (Complex Double), Int)
upgtr :: Char
-> Int
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
upgtr Char
uplo Int
n Array ZeroInt (Complex Double)
ap Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
tau
String -> Bool -> IO ()
Call.assert String
"upgtr: 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
"upgtr: 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) (Complex Double)
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Double))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq
IOArray ZeroInt (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ do
Ptr CChar
uploPtr <- Char
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
Ptr CInt
nPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
Ptr (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
Ptr CInt
ldqPtr <- Int
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
(Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
work
Ptr CInt
infoPtr <- FortranIO
(Array (ZeroInt, ZeroInt) (Complex Double), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.upgtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
qPtr Ptr CInt
ldqPtr Ptr (Complex Double)
workPtr Ptr CInt
infoPtr
IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a.
IO a -> ContT (Array (ZeroInt, ZeroInt) (Complex Double), Int) IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double), Int)
-> ContT
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
IO
(Array (ZeroInt, ZeroInt) (Complex Double), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
IO
(Array (ZeroInt, ZeroInt) (Complex Double)
-> Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex 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) (Complex Double)
-> IO (Array (ZeroInt, ZeroInt) (Complex Double))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Double)
q
IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Double), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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)
upmtr ::
Char ->
Char ->
Char ->
Int ->
Array ZeroInt (Complex Double) ->
Array ZeroInt (Complex Double) ->
IOArray (ZeroInt,ZeroInt) (Complex Double) ->
Int ->
IO (Int)
upmtr :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt (Complex Double)
-> Array ZeroInt (Complex Double)
-> IOArray (ZeroInt, ZeroInt) (Complex Double)
-> Int
-> IO Int
upmtr Char
side Char
uplo Char
trans Int
m Array ZeroInt (Complex Double)
ap Array ZeroInt (Complex Double)
tau IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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 (Complex Double) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Double)
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) (Complex Double) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Double)
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 (Complex Double)
work <- Int -> IO (IOArray ZeroInt (Complex Double))
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 (Complex Double)
apPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
ap
Ptr (Complex Double)
tauPtr <- Array ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Double)
tau
Ptr (Complex Double)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Double)
c
Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
Ptr (Complex Double)
workPtr <- IOArray ZeroInt (Complex Double)
-> FortranIO Int (Ptr (Complex Double))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Double)
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 (Complex Double)
-> Ptr (Complex Double)
-> Ptr (Complex Double)
-> Ptr CInt
-> Ptr (Complex Double)
-> Ptr CInt
-> IO ()
FFI.upmtr Ptr CChar
sidePtr Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Double)
apPtr Ptr (Complex Double)
tauPtr Ptr (Complex Double)
cPtr Ptr CInt
ldcPtr Ptr (Complex Double)
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)