-- Do not edit! Automatically generated by create-lapack-ffi.
module Numeric.LAPACK.ComfortArray.Double where

import qualified Numeric.LAPACK.FFI.Double as FFI
import qualified Numeric.Netlib.ComfortArray.Utility as Call
import Numeric.Netlib.ComfortArray.Utility (ZeroInt, (^!))

import qualified Data.Array.Comfort.Storable.Mutable as MutArray
import qualified Data.Array.Comfort.Storable as Array
import Data.Array.Comfort.Storable.Mutable (IOArray)
import Data.Array.Comfort.Storable (Array)

import Foreign.Storable (peek)
import Foreign.Ptr (Ptr, FunPtr)
import Foreign.C.String (castCCharToChar)
import Foreign.C.Types (CInt)

import Control.Monad.Trans.Cont (evalContT)
import Control.Monad.IO.Class (liftIO)
import Control.Applicative (pure, (<*>))


-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbbcsd.f>
bbcsd ::
   Char {- ^ jobu1 -} ->
   Char {- ^ jobu2 -} ->
   Char {- ^ jobv1t -} ->
   Char {- ^ jobv2t -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   IOArray ZeroInt Double {- ^ theta -} ->
   IOArray ZeroInt Double {- ^ phi -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ u1 -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ u2 -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ v1t -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ v2t -} ->
   Int {- ^ lwork -} ->
   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) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, 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)
bbcsd Char
jobu1 Char
jobu2 Char
jobv1t Char
jobv2t Char
trans Int
m IOArray ZeroInt Double
theta IOArray ZeroInt Double
phi IOArray (ZeroInt, ZeroInt) Double
u1 IOArray (ZeroInt, ZeroInt) Double
u2 IOArray (ZeroInt, ZeroInt) Double
v1t IOArray (ZeroInt, ZeroInt) Double
v2t Int
lwork = do
   let thetaDim0 :: Int
thetaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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 Double
u1Ptr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
u2Ptr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
v1tPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
v2tPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
workPtr <- 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
work
      Ptr CInt
lworkPtr <- 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
lwork
      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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr 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 Double
u1Ptr Ptr CInt
ldu1Ptr Ptr Double
u2Ptr Ptr CInt
ldu2Ptr Ptr Double
v1tPtr Ptr CInt
ldv1tPtr Ptr 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
workPtr Ptr CInt
lworkPtr 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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbdsdc.f>
bdsdc ::
   Char {- ^ uplo -} ->
   Char {- ^ compq -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   Int {- ^ ldu -} ->
   Int {- ^ ldvt -} ->
   Int {- ^ ldq -} ->
   Int {- ^ ldiq -} ->
   Int {- ^ lwork -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt Double, Array ZeroInt CInt, Int)
bdsdc :: Char
-> Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
bdsdc Char
uplo Char
compq IOArray ZeroInt Double
d IOArray ZeroInt Double
e Int
ldu Int
ldvt Int
ldq Int
ldiq Int
lwork = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt 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
"bdsdc: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   IOArray (ZeroInt, ZeroInt) Double
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldu
   IOArray (ZeroInt, ZeroInt) Double
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvt
   IOArray ZeroInt Double
q <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
ldq
   IOArray ZeroInt CInt
iq <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
ldiq
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt Double, Array ZeroInt CInt, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt Double, Array ZeroInt CInt, Int)
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt Double, Array ZeroInt CInt, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt Double, Array ZeroInt CInt, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt Double, Array ZeroInt CInt, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
compqPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compq
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt 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
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt 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
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt 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
uPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
u
      Ptr CInt
lduPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr Double
vtPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
vt
      Ptr CInt
ldvtPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
      Ptr Double
qPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt 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
q
      Ptr CInt
iqPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt 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
iq
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt 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) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt 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) Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt Double, Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt Double, Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt 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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.bdsdc Ptr CChar
uploPtr Ptr CChar
compqPtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
uPtr Ptr CInt
lduPtr Ptr Double
vtPtr Ptr CInt
ldvtPtr Ptr Double
qPtr Ptr CInt
iqPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt Double, Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt Double, Array ZeroInt CInt, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt Double, Array ZeroInt CInt, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt Double, Array ZeroInt CInt, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt Double
 -> Array ZeroInt CInt
 -> Int
 -> (Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
     Array ZeroInt CInt, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int))
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
u
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int))
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
vt
         IO
  (Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int))
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
q
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
iq
         IO
  (Int
   -> (Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dbdsqr.f>
bdsqr ::
   Char {- ^ uplo -} ->
   Int {- ^ nru -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ vt -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ u -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   IO (Int)
bdsqr :: Char
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
bdsqr Char
uplo Int
nru IOArray ZeroInt Double
d IOArray ZeroInt Double
e IOArray (ZeroInt, ZeroInt) Double
vt IOArray (ZeroInt, ZeroInt) Double
u IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
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
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 Double
vtPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
vt
      Ptr CInt
ldvtPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
      Ptr Double
uPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
u
      Ptr CInt
lduPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr 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 Double
vtPtr Ptr CInt
ldvtPtr Ptr Double
uPtr Ptr CInt
lduPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ddisna.f>
disna ::
   Char {- ^ job -} ->
   Int {- ^ m -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ d -} ->
   Int {- ^ sepSize -} ->
   IO (Array ZeroInt Double, Int)
disna :: Char
-> Int
-> Int
-> Array ZeroInt Double
-> Int
-> IO (Array ZeroInt Double, Int)
disna Char
job Int
m Int
n Array ZeroInt Double
d Int
sepSize = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
d
   let _dSize :: Int
_dSize = Int
dDim0
   IOArray ZeroInt Double
sep <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
sepSize
   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
jobPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO (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 Double
sepPtr <- 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
sep
      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 (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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.disna Ptr CChar
jobPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
sepPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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 -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbbrd.f>
gbbrd ::
   Char {- ^ vect -} ->
   Int {- ^ m -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Int {- ^ ldq -} ->
   Int {- ^ ldpt -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)
gbbrd :: Char
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
gbbrd Char
vect Int
m Int
kl Int
ku IOArray (ZeroInt, ZeroInt) Double
ab Int
ldq Int
ldpt IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 (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 (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) Double
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
m Int
ldq
   IOArray (ZeroInt, ZeroInt) Double
pt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldpt
   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] -> Int
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) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
  IO
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
   IO
   (Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
vectPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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) Double, Array (ZeroInt, ZeroInt) 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) Double, Array (ZeroInt, 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,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
      Ptr Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, 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,
      Array (ZeroInt, ZeroInt) Double, 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
ePtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
e
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Double
ptPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
pt
      Ptr CInt
ldptPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldpt
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
c
      Ptr CInt
ldcPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
work
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, 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, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> 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 Double
abPtr Ptr CInt
ldabPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr Double
ptPtr Ptr CInt
ldptPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int)
      IO
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt Double,
     Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
     Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
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) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
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) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
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
q
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
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
pt
         IO
  (Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbcon.f>
gbcon ::
   Char {- ^ norm -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Double {- ^ anorm -} ->
   IO (Double, Int)
gbcon :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> Double
-> IO (Double, Int)
gbcon Char
norm Int
kl Int
ku Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
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 Double
abPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (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, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Int) IO ()
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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbcon Ptr CChar
normPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbequ.f>
gbequ ::
   Int {- ^ m -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)
gbequ :: Int
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Double, Int)
gbequ Int
m Int
kl Int
ku Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double
abPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Double, Int)
     (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 (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 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 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 (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 (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 (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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbequb.f>
gbequb ::
   Int {- ^ m -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)
gbequb :: Int
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Double, Int)
gbequb Int
m Int
kl Int
ku Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double
abPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Double, Int)
     (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 (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 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 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 (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 (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 (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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbrfs.f>
gbrfs ::
   Char {- ^ trans -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ afb -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
gbrfs :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
gbrfs Char
trans Int
kl Int
ku Array (ZeroInt, ZeroInt) Double
ab Array (ZeroInt, ZeroInt) Double
afb Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt 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 Double
abPtr <- Array (ZeroInt, 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, ZeroInt) 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
afbPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
bPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
xPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbrfs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
afbPtr Ptr CInt
ldafbPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbsv.f>
gbsv ::
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Array ZeroInt CInt, Int)
gbsv :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt CInt, Int)
gbsv Int
kl Int
ku IOArray (ZeroInt, ZeroInt) Double
ab IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
abPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
bPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbsv Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbsvx.f>
gbsvx ::
   Char {- ^ fact -} ->
   Char {- ^ trans -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ afb -} ->
   IOArray ZeroInt CInt {- ^ ipiv -} ->
   Char {- ^ equed -} ->
   IOArray ZeroInt Double {- ^ r -} ->
   IOArray ZeroInt Double {- ^ c -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Char, Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)
gbsvx :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt CInt
-> Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
gbsvx Char
fact Char
trans Int
kl Int
ku IOArray (ZeroInt, ZeroInt) Double
ab IOArray (ZeroInt, ZeroInt) Double
afb IOArray ZeroInt CInt
ipiv Char
equed IOArray ZeroInt Double
r IOArray ZeroInt Double
c IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
  IO
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) 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) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
   IO
   (Char, Array (ZeroInt, ZeroInt) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
 -> IO
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Double
afbPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
afb
      Ptr CInt
ldafbPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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) 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) 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) 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Char, Array (ZeroInt, 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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 CInt
infoPtr <- FortranIO
  (Char, Array (ZeroInt, 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
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) 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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CChar
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbsvx Ptr CChar
factPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
afbPtr Ptr CInt
ldafbPtr Ptr CInt
ipivPtr Ptr CChar
equedPtr Ptr Double
rPtr Ptr Double
cPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Char, Array (ZeroInt, ZeroInt) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int)
      IO
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Char
 -> Array (ZeroInt, ZeroInt) Double
 -> Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
     Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
     (Char
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Char
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Char
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CChar -> Char) -> IO CChar -> IO Char
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) Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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
x
         IO
  (Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbtf2.f>
gbtf2 ::
   Int {- ^ m -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IO (Array ZeroInt CInt, Int)
gbtf2 :: Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt CInt, Int)
gbtf2 Int
m Int
kl Int
ku IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 (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 Double
abPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbtf2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr 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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbtrf.f>
gbtrf ::
   Int {- ^ m -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IO (Array ZeroInt CInt, Int)
gbtrf :: Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt CInt, Int)
gbtrf Int
m Int
kl Int
ku IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 (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 Double
abPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbtrf Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr 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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgbtrs.f>
gbtrs ::
   Char {- ^ trans -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
gbtrs :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
gbtrs Char
trans Int
kl Int
ku Array (ZeroInt, ZeroInt) Double
ab Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
abPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbtrs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebak.f>
gebak ::
   Char {- ^ job -} ->
   Char {- ^ side -} ->
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   Array ZeroInt Double {- ^ scale -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ v -} ->
   IO (Int)
gebak :: Char
-> Char
-> Int
-> Int
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
gebak Char
job Char
side Int
ilo Int
ihi Array ZeroInt Double
scale IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
vPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 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 Double
vPtr Ptr CInt
ldvPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebal.f>
gebal ::
   Char {- ^ job -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Int, Int, Array ZeroInt Double, Int)
gebal :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Int, Int, Array ZeroInt Double, Int)
gebal Char
job IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gebal Ptr CChar
jobPtr Ptr CInt
nPtr Ptr 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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebd2.f>
gebd2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)
gebd2 :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
gebd2 Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 (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 (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 Double
tauq <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
taup <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
m,Int
n])
   ContT
  (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, Int)
-> IO
     (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, Int)
   IO
   (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, Int))
-> ContT
     (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, Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int
-> FortranIO
     (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
nPtr <- Int
-> FortranIO
     (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
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (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
lda
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
d
      Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
     (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
e
      Ptr Double
tauqPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
tauq
      Ptr Double
taupPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
taup
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
work
      Ptr CInt
infoPtr <- FortranIO
  (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, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (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, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gebd2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
tauqPtr Ptr Double
taupPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO
  (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, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (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, Int)
      IO
      (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, Int)
-> ContT
     (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, Int)
forall a b. (a -> b) -> a -> b
$ (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, Int))
-> 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, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         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, 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, Int))
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 Double
   -> Array ZeroInt Double
   -> Int
   -> (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, Int))
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 Double
   -> Array ZeroInt Double
   -> Int
   -> (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, Int))
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
tauq
         IO
  (Array ZeroInt Double
   -> Int
   -> (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, Int))
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
taup
         IO
  (Int
   -> (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, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgebrd.f>
gebrd ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)
gebrd :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
gebrd Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 (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 (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 Double
tauq <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
taup <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT
  (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, Int)
-> IO
     (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, Int)
   IO
   (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, Int))
-> ContT
     (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, Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int
-> FortranIO
     (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
nPtr <- Int
-> FortranIO
     (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
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (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
lda
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
d
      Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
     (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
e
      Ptr Double
tauqPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
tauq
      Ptr Double
taupPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
taup
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (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
lwork
      Ptr CInt
infoPtr <- FortranIO
  (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, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (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, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gebrd Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
tauqPtr Ptr Double
taupPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO
  (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, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (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, Int)
      IO
      (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, Int)
-> ContT
     (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, Int)
forall a b. (a -> b) -> a -> b
$ (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, Int))
-> 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, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         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, 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, Int))
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 Double
   -> Array ZeroInt Double
   -> Int
   -> (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, Int))
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 Double
   -> Array ZeroInt Double
   -> Int
   -> (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, Int))
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
tauq
         IO
  (Array ZeroInt Double
   -> Int
   -> (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, Int))
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
taup
         IO
  (Int
   -> (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, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgecon.f>
gecon ::
   Char {- ^ norm -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Double {- ^ anorm -} ->
   IO (Double, Int)
gecon :: Char
-> Array (ZeroInt, ZeroInt) Double -> Double -> IO (Double, Int)
gecon Char
norm Array (ZeroInt, ZeroInt) 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) 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 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Int) (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 (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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (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, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Int) IO ()
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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gecon Ptr CChar
normPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeequ.f>
geequ ::
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)
geequ :: Int
-> Array (ZeroInt, ZeroInt) Double
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Double, Int)
geequ Int
m Array (ZeroInt, ZeroInt) 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) 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 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Double, Int)
     (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 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 (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 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 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 (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 (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 (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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeequb.f>
geequb ::
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Int)
geequb :: Int
-> Array (ZeroInt, ZeroInt) Double
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Double, Int)
geequb Int
m Array (ZeroInt, ZeroInt) 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) 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 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Double, Int)
     (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 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 (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 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 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 (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 (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 (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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgees.f>
gees ::
   Char {- ^ jobvs -} ->
   Char {- ^ sort -} ->
   FunPtr (Ptr Double -> Ptr Double -> IO Bool) {- ^ select -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ ldvs -} ->
   Int {- ^ lwork -} ->
   IO (Int, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)
gees :: Char
-> Char
-> FunPtr (Ptr Double -> Ptr Double -> IO Bool)
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
gees Char
jobvs Char
sort FunPtr (Ptr Double -> Ptr Double -> IO Bool)
select IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
wr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
wi <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
vs <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvs
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   IOArray ZeroInt Bool
bwork <- Int -> IO (IOArray ZeroInt Bool)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> IO
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobvsPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvs
      Ptr CChar
sortPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
      FunPtr (Ptr Double -> Ptr Double -> IO Bool)
selectPtr <- FunPtr (Ptr Double -> Ptr Double -> IO Bool)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (FunPtr (Ptr Double -> Ptr Double -> IO Bool))
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr Double -> Ptr Double -> IO Bool)
select
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
sdimPtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
wrPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      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
wr
      Ptr Double
wiPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      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
wi
      Ptr Double
vsPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      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
vs
      Ptr CInt
ldvsPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvs
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, 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 Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr Double -> Ptr Double -> IO Bool)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.gees Ptr CChar
jobvsPtr Ptr CChar
sortPtr FunPtr (Ptr Double -> Ptr Double -> IO Bool)
selectPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
sdimPtr Ptr Double
wrPtr Ptr Double
wiPtr Ptr Double
vsPtr Ptr CInt
ldvsPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Int, Array ZeroInt Double, Array ZeroInt Double,
     Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
wr
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
wi
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
vs
         IO
  (Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeesx.f>
geesx ::
   Char {- ^ jobvs -} ->
   Char {- ^ sort -} ->
   FunPtr (Ptr Double -> Ptr Double -> IO Bool) {- ^ select -} ->
   Char {- ^ sense -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ ldvs -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Int, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Double, Double, Int)
geesx :: Char
-> Char
-> FunPtr (Ptr Double -> Ptr Double -> IO Bool)
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
geesx Char
jobvs Char
sort FunPtr (Ptr Double -> Ptr Double -> IO Bool)
select Char
sense IOArray (ZeroInt, ZeroInt) Double
a Int
ldvs Int
lwork Int
liwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
wr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
wi <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
vs <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvs
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 (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 Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
  IO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
   IO
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
 -> IO
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobvsPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
      FunPtr (Ptr Double -> Ptr Double -> IO Bool)
selectPtr <- FunPtr (Ptr Double -> Ptr Double -> IO Bool)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     IO
     (FunPtr (Ptr Double -> Ptr Double -> IO Bool))
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr Double -> Ptr Double -> IO Bool)
select
      Ptr CChar
sensePtr <- Char
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
sdimPtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
wrPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, 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
wr
      Ptr Double
wiPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, 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
wi
      Ptr Double
vsPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
vs
      Ptr CInt
ldvsPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvs
      Ptr Double
rcondePtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
rcondvPtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, 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 Double,
      Array (ZeroInt, ZeroInt) Double, 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
liworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, 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 Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr Double -> Ptr Double -> IO Bool)
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.geesx Ptr CChar
jobvsPtr Ptr CChar
sortPtr FunPtr (Ptr Double -> Ptr Double -> IO Bool)
selectPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
sdimPtr Ptr Double
wrPtr Ptr Double
wiPtr Ptr Double
vsPtr Ptr CInt
ldvsPtr Ptr Double
rcondePtr Ptr Double
rcondvPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
      IO
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Double
 -> Double
 -> Int
 -> (Int, Array ZeroInt Double, Array ZeroInt Double,
     Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
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
wr
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
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
wi
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
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
vs
         IO
  (Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO Double
-> IO
     (Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
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 Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO Double
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
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 Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeev.f>
geev ::
   Char {- ^ jobvl -} ->
   Char {- ^ jobvr -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ ldvl -} ->
   Int {- ^ ldvr -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)
geev :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
geev Char
jobvl Char
jobvr IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
wr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
wi <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
   IOArray (ZeroInt, ZeroInt) Double
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvr
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
  IO
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
   IO
   (Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobvlPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvl
      Ptr CChar
jobvrPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvr
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
wrPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
wr
      Ptr Double
wiPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
wi
      Ptr Double
vlPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
vl
      Ptr CInt
ldvlPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
      Ptr Double
vrPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
vr
      Ptr CInt
ldvrPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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, ZeroInt) Double, Array (ZeroInt, 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, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geev Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
wrPtr Ptr Double
wiPtr Ptr Double
vlPtr Ptr CInt
ldvlPtr Ptr Double
vrPtr Ptr CInt
ldvrPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int)
      IO
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt Double,
     Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
     Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
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
wr
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
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
wi
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
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
vl
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
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
vr
         IO
  (Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeevx.f>
geevx ::
   Char {- ^ balanc -} ->
   Char {- ^ jobvl -} ->
   Char {- ^ jobvr -} ->
   Char {- ^ sense -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ ldvl -} ->
   Int {- ^ ldvr -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)
geevx :: Char
-> Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
wr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
wi <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
   IOArray (ZeroInt, ZeroInt) Double
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2)
   ContT
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
  IO
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
   IO
   (Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double
wrPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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
wr
      Ptr Double
wiPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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
wi
      Ptr Double
vlPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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, ZeroInt) Double
vl
      Ptr CInt
ldvlPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double
vrPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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, ZeroInt) Double
vr
      Ptr CInt
ldvrPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt 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 CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geevx Ptr CChar
balancPtr Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
wrPtr Ptr Double
wiPtr Ptr Double
vlPtr Ptr CInt
ldvlPtr Ptr Double
vrPtr Ptr CInt
ldvrPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
scalePtr Ptr Double
abnrmPtr Ptr Double
rcondePtr Ptr Double
rcondvPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int)
      IO
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> Int
 -> Array ZeroInt Double
 -> Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt Double,
     Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
     Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
     Array ZeroInt Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> Int
      -> Array ZeroInt Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> Int
   -> Array ZeroInt Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> Int
      -> Array ZeroInt Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
wr
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> Int
   -> Array ZeroInt Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> Int
      -> Array ZeroInt Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
wi
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> Int
   -> Array ZeroInt Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> Int
      -> Array ZeroInt Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
vl
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> Int
   -> Array ZeroInt Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> Int
      -> Array ZeroInt Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
vr
         IO
  (Int
   -> Int
   -> Array ZeroInt Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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 Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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 Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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 Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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 Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgehd2.f>
gehd2 ::
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double, Int)
gehd2 :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Int)
gehd2 Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
tau <- 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   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
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      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 (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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gehd2 Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
tau
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgehrd.f>
gehrd ::
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Int)
gehrd :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Int)
gehrd Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
tau <- 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
   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
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      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 (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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gehrd Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
tau
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgejsv.f>
gejsv ::
   Char {- ^ joba -} ->
   Char {- ^ jobu -} ->
   Char {- ^ jobv -} ->
   Char {- ^ jobr -} ->
   Char {- ^ jobt -} ->
   Char {- ^ jobp -} ->
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ ldu -} ->
   Int {- ^ ldv -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)
gejsv :: Char
-> Char
-> Char
-> Char
-> Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
gejsv Char
joba Char
jobu Char
jobv Char
jobr Char
jobt Char
jobp Int
m IOArray (ZeroInt, ZeroInt) Double
a Int
ldu Int
ldv Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
sva <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldu
   IOArray (ZeroInt, ZeroInt) Double
v <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldv
   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
mInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobaPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
joba
      Ptr CChar
jobuPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu
      Ptr CChar
jobvPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv
      Ptr CChar
jobrPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobr
      Ptr CChar
jobtPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobt
      Ptr CChar
jobpPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobp
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
svaPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
sva
      Ptr Double
uPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
u
      Ptr CInt
lduPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr Double
vPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
v
      Ptr CInt
ldvPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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 Double, Array (ZeroInt, ZeroInt) Double,
      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
iwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gejsv Ptr CChar
jobaPtr Ptr CChar
jobuPtr Ptr CChar
jobvPtr Ptr CChar
jobrPtr Ptr CChar
jobtPtr Ptr CChar
jobpPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
svaPtr Ptr Double
uPtr Ptr CInt
lduPtr Ptr Double
vPtr Ptr CInt
ldvPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
sva
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
u
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
v
         IO
  (Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelq2.f>
gelq2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double, Int)
gelq2 :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Int)
gelq2 Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gelq2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
tau
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelqf.f>
gelqf ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Int)
gelqf :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Int)
gelqf Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gelqf Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
tau
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgels.f>
gels ::
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ lwork -} ->
   IO (Int)
gels :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
gels Char
trans Int
m IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gels Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelsd.f>
gelsd ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Double {- ^ rcond -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Double, Int, Int)
gelsd :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Double
-> Int
-> Int
-> IO (Array ZeroInt Double, Int, Int)
gelsd Int
m IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) Double
b Double
rcond Int
lwork Int
liwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 (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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
bPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
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 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gelsd Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
sPtr Ptr Double
rcondPtr Ptr CInt
rankPtr Ptr Double
workPtr Ptr CInt
lworkPtr 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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelss.f>
gelss ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Double {- ^ rcond -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Int, Int)
gelss :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Double
-> Int
-> IO (Array ZeroInt Double, Int, Int)
gelss Int
m IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
bPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
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 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gelss Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
sPtr Ptr Double
rcondPtr Ptr CInt
rankPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int, Int)
-> ContT
     (Array ZeroInt Double, Int, Int)
     IO
     (Array ZeroInt Double, Int, Int)
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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgelsy.f>
gelsy ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray ZeroInt CInt {- ^ jpvt -} ->
   Double {- ^ rcond -} ->
   Int {- ^ lwork -} ->
   IO (Int, Int)
gelsy :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt CInt
-> Double
-> Int
-> IO (Int, Int)
gelsy Int
m IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int) IO (Int, Int) -> IO (Int, Int))
-> ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Int) IO ()
forall (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gelsy Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
jpvtPtr Ptr Double
rcondPtr Ptr CInt
rankPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Int -> Int -> (Int, Int)) -> IO Int -> IO (Int -> (Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeql2.f>
geql2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double, Int)
geql2 :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Int)
geql2 Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.geql2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
tau
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqlf.f>
geqlf ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Int)
geqlf :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Int)
geqlf Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geqlf Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
tau
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqp3.f>
geqp3 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray ZeroInt CInt {- ^ jpvt -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Int)
geqp3 :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt CInt
-> Int
-> IO (Array ZeroInt Double, Int)
geqp3 Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 CInt
jpvtPtr <- 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
jpvt
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geqp3 Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
jpvtPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
tau
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqr2.f>
geqr2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double, Int)
geqr2 :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Int)
geqr2 Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.geqr2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
tau
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqr2p.f>
geqr2p ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double, Int)
geqr2p :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Int)
geqr2p Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.geqr2p Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
tau
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqrf.f>
geqrf ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Int)
geqrf :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Int)
geqrf Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geqrf Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
tau
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeqrfp.f>
geqrfp ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Int)
geqrfp :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Int)
geqrfp Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geqrfp Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
tau
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgerfs.f>
gerfs ::
   Char {- ^ trans -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ af -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
gerfs :: Char
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
gerfs Char
trans Array (ZeroInt, ZeroInt) Double
a Array (ZeroInt, ZeroInt) Double
af Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt 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 Double
aPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
afPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
bPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
xPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (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
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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gerfs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgerq2.f>
gerq2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double, Int)
gerq2 :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Int)
gerq2 Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gerq2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
tau
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgerqf.f>
gerqf ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Int)
gerqf :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Int)
gerqf Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gerqf Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
tau
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesc2.f>
gesc2 ::
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray ZeroInt Double {- ^ rhs -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array ZeroInt CInt {- ^ jpiv -} ->
   IO (Double)
gesc2 :: Array (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> IO Double
gesc2 Array (ZeroInt, ZeroInt) Double
a IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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
   String -> Bool -> IO ()
Call.assert String
"gesc2: n == rhsDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
rhsDim0)
   String -> Bool -> IO ()
Call.assert String
"gesc2: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   String -> Bool -> IO ()
Call.assert String
"gesc2: n == jpivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
jpivDim0)
   ContT 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO 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 Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
rhsPtr <- 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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> IO ()
FFI.gesc2 Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
rhsPtr Ptr CInt
ipivPtr Ptr CInt
jpivPtr Ptr Double
scalePtr
      IO Double -> ContT Double IO Double
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

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesdd.f>
gesdd ::
   Char {- ^ jobz -} ->
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ ucol -} ->
   Int {- ^ ldu -} ->
   Int {- ^ ldvt -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)
gesdd :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
gesdd Char
jobz Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray (ZeroInt, ZeroInt) Double
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
ucol Int
ldu
   IOArray (ZeroInt, ZeroInt) Double
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvt
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*[Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   ContT
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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) Double,
      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
s
      Ptr Double
uPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
u
      Ptr CInt
lduPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr Double
vtPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
vt
      Ptr CInt
ldvtPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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 Double, Array (ZeroInt, ZeroInt) Double,
      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
iwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gesdd Ptr CChar
jobzPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
sPtr Ptr Double
uPtr Ptr CInt
lduPtr Ptr Double
vtPtr Ptr CInt
ldvtPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
u
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
vt
         IO
  (Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesv.f>
gesv ::
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Array ZeroInt CInt, Int)
gesv :: IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt CInt, Int)
gesv IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
bPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gesv Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesvd.f>
gesvd ::
   Char {- ^ jobu -} ->
   Char {- ^ jobvt -} ->
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ ucol -} ->
   Int {- ^ ldu -} ->
   Int {- ^ ldvt -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)
gesvd :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
gesvd Char
jobu Char
jobvt Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray (ZeroInt, ZeroInt) Double
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
ucol Int
ldu
   IOArray (ZeroInt, ZeroInt) Double
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvt
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobuPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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) Double,
      Array (ZeroInt, ZeroInt) 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) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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) Double,
      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
s
      Ptr Double
uPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
u
      Ptr CInt
lduPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr Double
vtPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
vt
      Ptr CInt
ldvtPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gesvd Ptr CChar
jobuPtr Ptr CChar
jobvtPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
sPtr Ptr Double
uPtr Ptr CInt
lduPtr Ptr Double
vtPtr Ptr CInt
ldvtPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
u
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
vt
         IO
  (Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesvj.f>
gesvj ::
   Char {- ^ joba -} ->
   Char {- ^ jobu -} ->
   Char {- ^ jobv -} ->
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ mv -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ v -} ->
   IOArray ZeroInt Double {- ^ work -} ->
   IO (Array ZeroInt Double, Int)
gesvj :: Char
-> Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt Double
-> IO (Array ZeroInt Double, Int)
gesvj Char
joba Char
jobu Char
jobv Int
m IOArray (ZeroInt, ZeroInt) Double
a Int
mv IOArray (ZeroInt, ZeroInt) Double
v IOArray ZeroInt Double
work = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
v
   let workDim0 :: Int
workDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
work
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldv :: Int
ldv = Int
vDim1
   let lwork :: Int
lwork = Int
workDim0
   String -> Bool -> IO ()
Call.assert String
"gesvj: n == vDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vDim0)
   IOArray ZeroInt Double
sva <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   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
jobaPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
joba
      Ptr CChar
jobuPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu
      Ptr CChar
jobvPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
svaPtr <- 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
sva
      Ptr CInt
mvPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mv
      Ptr Double
vPtr <- IOArray (ZeroInt, 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, ZeroInt) Double
v
      Ptr CInt
ldvPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      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 (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 CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gesvj Ptr CChar
jobaPtr Ptr CChar
jobuPtr Ptr CChar
jobvPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
svaPtr Ptr CInt
mvPtr Ptr Double
vPtr Ptr CInt
ldvPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
sva
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesvx.f>
gesvx ::
   Char {- ^ fact -} ->
   Char {- ^ trans -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ af -} ->
   IOArray ZeroInt CInt {- ^ ipiv -} ->
   Char {- ^ equed -} ->
   IOArray ZeroInt Double {- ^ r -} ->
   IOArray ZeroInt Double {- ^ c -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Char, Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)
gesvx :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt CInt
-> Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
gesvx Char
fact Char
trans IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) Double
af IOArray ZeroInt CInt
ipiv Char
equed IOArray ZeroInt Double
r IOArray ZeroInt Double
c IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
  IO
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) 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) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
   IO
   (Char, Array (ZeroInt, ZeroInt) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
 -> IO
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
afPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
af
      Ptr CInt
ldafPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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) 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) 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) 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Char, Array (ZeroInt, 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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 CInt
infoPtr <- FortranIO
  (Char, Array (ZeroInt, 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
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) 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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CChar
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gesvx Ptr CChar
factPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr CChar
equedPtr Ptr Double
rPtr Ptr Double
cPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Char, Array (ZeroInt, ZeroInt) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int)
      IO
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Char
 -> Array (ZeroInt, ZeroInt) Double
 -> Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
     Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
     (Char
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Char
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Char
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CChar -> Char) -> IO CChar -> IO Char
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) Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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
x
         IO
  (Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetc2.f>
getc2 ::
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
getc2 :: IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
getc2 IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getc2 Ptr CInt
nPtr Ptr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetf2.f>
getf2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt CInt, Int)
getf2 :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt CInt, Int)
getf2 Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 (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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getf2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr 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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetrf.f>
getrf ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt CInt, Int)
getrf :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt CInt, Int)
getrf Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 (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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getrf Ptr CInt
mPtr Ptr CInt
nPtr Ptr 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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetri.f>
getri ::
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Int {- ^ lwork -} ->
   IO (Int)
getri :: IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt -> Int -> IO Int
getri IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 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
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 (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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getri Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgetrs.f>
getrs ::
   Char {- ^ trans -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
getrs :: Char
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
getrs Char
trans Array (ZeroInt, ZeroInt) Double
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getrs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggbak.f>
ggbak ::
   Char {- ^ job -} ->
   Char {- ^ side -} ->
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   Array ZeroInt Double {- ^ lscale -} ->
   Array ZeroInt Double {- ^ rscale -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ v -} ->
   IO (Int)
ggbak :: Char
-> Char
-> Int
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
ggbak Char
job Char
side Int
ilo Int
ihi Array ZeroInt Double
lscale Array ZeroInt Double
rscale IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
vPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 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 Double
vPtr Ptr CInt
ldvPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggbal.f>
ggbal ::
   Char {- ^ job -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ lwork -} ->
   IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
ggbal :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Int)
ggbal Char
job IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
"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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
bPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr 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 Double
aPtr Ptr CInt
ldaPtr Ptr 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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgges.f>
gges ::
   Char {- ^ jobvsl -} ->
   Char {- ^ jobvsr -} ->
   Char {- ^ sort -} ->
   FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool) {- ^ selctg -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldvsl -} ->
   Int {- ^ ldvsr -} ->
   Int {- ^ lwork -} ->
   IO (Int, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)
gges :: Char
-> Char
-> Char
-> FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool)
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
gges Char
jobvsl Char
jobvsr Char
sort FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool)
selctg IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
"gges: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt Double
alphar <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
alphai <- 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, ZeroInt) Double
vsl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsl
   IOArray (ZeroInt, ZeroInt) Double
vsr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsr
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   IOArray ZeroInt Bool
bwork <- Int -> IO (IOArray ZeroInt Bool)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> IO
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobvslPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvsl
      Ptr CChar
jobvsrPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvsr
      Ptr CChar
sortPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
      FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool)
selctgPtr <- FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool))
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool)
selctg
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
sdimPtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
alpharPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
alphar
      Ptr Double
alphaiPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
alphai
      Ptr Double
betaPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
beta
      Ptr Double
vslPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
vsl
      Ptr CInt
ldvslPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsl
      Ptr Double
vsrPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
vsr
      Ptr CInt
ldvsrPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsr
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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 Double, Array ZeroInt Double,
   Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool)
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.gges Ptr CChar
jobvslPtr Ptr CChar
jobvsrPtr Ptr CChar
sortPtr FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool)
selctgPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
sdimPtr Ptr Double
alpharPtr Ptr Double
alphaiPtr Ptr Double
betaPtr Ptr Double
vslPtr Ptr CInt
ldvslPtr Ptr Double
vsrPtr Ptr CInt
ldvsrPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Int, Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
alphar
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
alphai
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
vsl
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
vsr
         IO
  (Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggesx.f>
ggesx ::
   Char {- ^ jobvsl -} ->
   Char {- ^ jobvsr -} ->
   Char {- ^ sort -} ->
   FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool) {- ^ selctg -} ->
   Char {- ^ sense -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldvsl -} ->
   Int {- ^ ldvsr -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Int, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt Double, Array ZeroInt Double, Int)
ggesx :: Char
-> Char
-> Char
-> FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool)
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
ggesx Char
jobvsl Char
jobvsr Char
sort FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool)
selctg Char
sense IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
"ggesx: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt Double
alphar <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
alphai <- 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, ZeroInt) Double
vsl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsl
   IOArray (ZeroInt, ZeroInt) Double
vsr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 (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 Double, Array ZeroInt Double,
   Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
  IO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
   IO
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
 -> IO
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobvslPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
      FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool)
selctgPtr <- FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool))
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool)
selctg
      Ptr CChar
sensePtr <- Char
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
   Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
alpharPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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
alphar
      Ptr Double
alphaiPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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
alphai
      Ptr Double
betaPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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
beta
      Ptr Double
vslPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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, ZeroInt) Double
vsl
      Ptr CInt
ldvslPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsl
      Ptr Double
vsrPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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, ZeroInt) Double
vsr
      Ptr CInt
ldvsrPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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
rconde
      Ptr Double
rcondvPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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
rcondv
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt 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
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
   Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool)
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.ggesx Ptr CChar
jobvslPtr Ptr CChar
jobvsrPtr Ptr CChar
sortPtr FunPtr (Ptr Double -> Ptr Double -> Ptr Double -> IO Bool)
selctgPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
sdimPtr Ptr Double
alpharPtr Ptr Double
alphaiPtr Ptr Double
betaPtr Ptr Double
vslPtr Ptr CInt
ldvslPtr Ptr Double
vsrPtr Ptr CInt
ldvsrPtr Ptr Double
rcondePtr Ptr Double
rcondvPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Int)
      IO
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> (Int, Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
     Array ZeroInt Double, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
alphar
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
alphai
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
vsl
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
vsr
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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 Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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 Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggev.f>
ggev ::
   Char {- ^ jobvl -} ->
   Char {- ^ jobvr -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldvl -} ->
   Int {- ^ ldvr -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)
ggev :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
ggev Char
jobvl Char
jobvr IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
"ggev: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt Double
alphar <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
alphai <- 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, ZeroInt) Double
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
   IOArray (ZeroInt, ZeroInt) Double
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvr
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
  IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, 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, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
   IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobvlPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvl
      Ptr CChar
jobvrPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvr
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
alpharPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
alphar
      Ptr Double
alphaiPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
alphai
      Ptr Double
betaPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
beta
      Ptr Double
vlPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
vl
      Ptr CInt
ldvlPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
      Ptr Double
vrPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
vr
      Ptr CInt
ldvrPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, 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, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggev Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
alpharPtr Ptr Double
alphaiPtr Ptr Double
betaPtr Ptr Double
vlPtr Ptr CInt
ldvlPtr Ptr Double
vrPtr Ptr CInt
ldvrPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int)
      IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
alphar
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
alphai
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
vl
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
vr
         IO
  (Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggevx.f>
ggevx ::
   Char {- ^ balanc -} ->
   Char {- ^ jobvl -} ->
   Char {- ^ jobvr -} ->
   Char {- ^ sense -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldvl -} ->
   Int {- ^ ldvr -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) 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) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
"ggevx: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt Double
alphar <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
alphai <- 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, ZeroInt) Double
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
   IOArray (ZeroInt, ZeroInt) Double
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6)
   IOArray ZeroInt Bool
bwork <- Int -> IO (IOArray ZeroInt Bool)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
   Double, Array ZeroInt Double, Array ZeroInt Double, Int)
  IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
   Double, Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
    Double, Array ZeroInt Double, Array ZeroInt Double, Int)
   IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
    Double, Array ZeroInt Double, Array ZeroInt Double, Int)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
       Double, Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
      Double, Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
      Double, Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double
alpharPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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
alphar
      Ptr Double
alphaiPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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
alphai
      Ptr Double
betaPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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
beta
      Ptr Double
vlPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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, ZeroInt) Double
vl
      Ptr CInt
ldvlPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double
vrPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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, ZeroInt) Double
vr
      Ptr CInt
ldvrPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
      Double, Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
       Double, Array ZeroInt Double, Array ZeroInt Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.ggevx Ptr CChar
balancPtr Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
alpharPtr Ptr Double
alphaiPtr Ptr Double
betaPtr Ptr Double
vlPtr Ptr CInt
ldvlPtr Ptr 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 Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
   Double, Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
      Double, Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
      Double, Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
    Double, Array ZeroInt Double, Array ZeroInt Double, Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
       Double, Array ZeroInt Double, Array ZeroInt Double, Int)
      IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
       Double, Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
      Double, Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
      Double, Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) 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 Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> Int
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Double
 -> Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
     Array ZeroInt Double, Double, Double, Array ZeroInt Double,
     Array ZeroInt Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) 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
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
alphar
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) 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
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
alphai
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) 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, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
       Array ZeroInt Double, Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
vl
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
       Array ZeroInt Double, Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
vr
         IO
  (Int
   -> Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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 Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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 Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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 Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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 Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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 Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) 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 Double, Array ZeroInt Double,
          Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int, Int, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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 Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) 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, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int, Int, Array ZeroInt Double, Array ZeroInt Double, Double,
      Double, Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggglm.f>
ggglm ::
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
ggglm :: IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt Double
-> Int
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
ggglm IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) Double
b IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
x <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   IOArray ZeroInt Double
y <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
p
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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 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
mPtr <- Int
-> FortranIO
     (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, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
bPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 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
xPtr <- 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
x
      Ptr Double
yPtr <- 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
y
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt 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, 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 (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 CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggglm Ptr CInt
nPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
dPtr Ptr Double
xPtr Ptr Double
yPtr Ptr Double
workPtr Ptr CInt
lworkPtr 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 (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 (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 (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
x
         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 (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
y
         IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgghrd.f>
gghrd ::
   Char {- ^ compq -} ->
   Char {- ^ compz -} ->
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   IO (Int)
gghrd :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
gghrd Char
compq Char
compz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) Double
q IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gghrd Ptr CChar
compqPtr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgglse.f>
gglse ::
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray ZeroInt Double {- ^ c -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Int)
gglse :: IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Int
-> IO (Array ZeroInt Double, Int)
gglse IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) Double
b IOArray ZeroInt Double
c IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
x <- 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] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
pPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
bPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
cPtr <- 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
c
      Ptr Double
dPtr <- 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
d
      Ptr Double
xPtr <- 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
x
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      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 (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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gglse Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
pPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
cPtr Ptr Double
dPtr Ptr Double
xPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
x
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggqrf.f>
ggqrf ::
   Int {- ^ n -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
ggqrf :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
ggqrf Int
n IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
taua <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
n,Int
m])
   IOArray ZeroInt Double
taub <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
n,Int
p])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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 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
mPtr <- Int
-> FortranIO
     (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, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
tauaPtr <- 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
taua
      Ptr Double
bPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
taubPtr <- 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
taub
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt 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, 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 (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 CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggqrf Ptr CInt
nPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
taubPtr Ptr Double
workPtr Ptr CInt
lworkPtr 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 (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 (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 (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
taua
         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 (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
taub
         IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dggrqf.f>
ggrqf ::
   Int {- ^ m -} ->
   Int {- ^ p -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
ggrqf :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
ggrqf Int
m Int
p IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
"ggrqf: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt Double
taua <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
taub <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
p,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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 CInt
mPtr <- Int
-> FortranIO
     (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, 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) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
tauaPtr <- 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
taua
      Ptr Double
bPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
taubPtr <- 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
taub
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt 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, 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 (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 CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggrqf Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
taubPtr Ptr Double
workPtr Ptr CInt
lworkPtr 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 (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 (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 (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
taua
         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 (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
taub
         IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgsvj0.f>
gsvj0 ::
   Char {- ^ jobv -} ->
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ sva -} ->
   Int {- ^ mv -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ v -} ->
   Double {- ^ eps -} ->
   Double {- ^ sfmin -} ->
   Double {- ^ tol -} ->
   Int {- ^ nsweep -} ->
   Int {- ^ lwork -} ->
   IO (Int)
gsvj0 :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Double
-> Double
-> Double
-> Int
-> Int
-> IO Int
gsvj0 Char
jobv Int
m IOArray (ZeroInt, ZeroInt) Double
a IOArray ZeroInt Double
d IOArray ZeroInt Double
sva Int
mv IOArray (ZeroInt, ZeroInt) Double
v Double
eps Double
sfmin Double
tol Int
nsweep Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
d
   let svaDim0 :: Int
svaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
sva
   let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
v
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldv :: Int
ldv = Int
vDim1
   String -> Bool -> IO ()
Call.assert String
"gsvj0: n == dDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
   String -> Bool -> IO ()
Call.assert String
"gsvj0: n == svaDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
svaDim0)
   String -> Bool -> IO ()
Call.assert String
"gsvj0: n == vDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vDim0)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobvPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      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
svaPtr <- 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
sva
      Ptr CInt
mvPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mv
      Ptr Double
vPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
v
      Ptr CInt
ldvPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr Double
epsPtr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
eps
      Ptr Double
sfminPtr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
sfmin
      Ptr Double
tolPtr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
tol
      Ptr CInt
nsweepPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nsweep
      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
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 (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 CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gsvj0 Ptr CChar
jobvPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
dPtr Ptr Double
svaPtr Ptr CInt
mvPtr Ptr Double
vPtr Ptr CInt
ldvPtr Ptr Double
epsPtr Ptr Double
sfminPtr Ptr Double
tolPtr Ptr CInt
nsweepPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgsvj1.f>
gsvj1 ::
   Char {- ^ jobv -} ->
   Int {- ^ m -} ->
   Int {- ^ n1 -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ sva -} ->
   Int {- ^ mv -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ v -} ->
   Double {- ^ eps -} ->
   Double {- ^ sfmin -} ->
   Double {- ^ tol -} ->
   Int {- ^ nsweep -} ->
   Int {- ^ lwork -} ->
   IO (Int)
gsvj1 :: Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Double
-> Double
-> Double
-> Int
-> Int
-> IO Int
gsvj1 Char
jobv Int
m Int
n1 IOArray (ZeroInt, ZeroInt) Double
a IOArray ZeroInt Double
d IOArray ZeroInt Double
sva Int
mv IOArray (ZeroInt, ZeroInt) Double
v Double
eps Double
sfmin Double
tol Int
nsweep Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
d
   let svaDim0 :: Int
svaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
sva
   let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
v
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldv :: Int
ldv = Int
vDim1
   String -> Bool -> IO ()
Call.assert String
"gsvj1: n == dDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
   String -> Bool -> IO ()
Call.assert String
"gsvj1: n == svaDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
svaDim0)
   String -> Bool -> IO ()
Call.assert String
"gsvj1: n == vDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vDim0)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobvPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
n1Ptr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n1
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      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
svaPtr <- 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
sva
      Ptr CInt
mvPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mv
      Ptr Double
vPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
v
      Ptr CInt
ldvPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr Double
epsPtr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
eps
      Ptr Double
sfminPtr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
sfmin
      Ptr Double
tolPtr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
tol
      Ptr CInt
nsweepPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nsweep
      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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gsvj1 Ptr CChar
jobvPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
n1Ptr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
dPtr Ptr Double
svaPtr Ptr CInt
mvPtr Ptr Double
vPtr Ptr CInt
ldvPtr Ptr Double
epsPtr Ptr Double
sfminPtr Ptr Double
tolPtr Ptr CInt
nsweepPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgtcon.f>
gtcon ::
   Char {- ^ norm -} ->
   Array ZeroInt Double {- ^ dl -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ du -} ->
   Array ZeroInt Double {- ^ du2 -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Double {- ^ anorm -} ->
   IO (Double, Int)
gtcon :: Char
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Double
-> IO (Double, Int)
gtcon Char
norm Array ZeroInt Double
dl Array ZeroInt Double
d Array ZeroInt Double
du Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
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 Double
dlPtr <- 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
dl
      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 Double
duPtr <- 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
du
      Ptr Double
du2Ptr <- 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
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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (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, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Int) IO ()
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 Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gtcon Ptr CChar
normPtr Ptr CInt
nPtr Ptr Double
dlPtr Ptr Double
dPtr Ptr Double
duPtr Ptr Double
du2Ptr Ptr CInt
ipivPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgtrfs.f>
gtrfs ::
   Char {- ^ trans -} ->
   Array ZeroInt Double {- ^ dl -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ du -} ->
   Array ZeroInt Double {- ^ dlf -} ->
   Array ZeroInt Double {- ^ df -} ->
   Array ZeroInt Double {- ^ duf -} ->
   Array ZeroInt Double {- ^ du2 -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
gtrfs :: Char
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
gtrfs Char
trans Array ZeroInt Double
dl Array ZeroInt Double
d Array ZeroInt Double
du Array ZeroInt Double
dlf Array ZeroInt Double
df Array ZeroInt Double
duf Array ZeroInt Double
du2 Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt 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 Double
dlPtr <- 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
dl
      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 Double
duPtr <- 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
du
      Ptr Double
dlfPtr <- 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
dlf
      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 Double
dufPtr <- 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
duf
      Ptr Double
du2Ptr <- 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
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 Double
bPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
xPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (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
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 (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 Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gtrfs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dlPtr Ptr Double
dPtr Ptr Double
duPtr Ptr Double
dlfPtr Ptr Double
dfPtr Ptr Double
dufPtr Ptr Double
du2Ptr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgtsv.f>
gtsv ::
   IOArray ZeroInt Double {- ^ dl -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ du -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
gtsv :: IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
gtsv IOArray ZeroInt Double
dl IOArray ZeroInt Double
d IOArray ZeroInt Double
du IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
dlPtr <- 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
dl
      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
duPtr <- 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
du
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gtsv Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dlPtr Ptr Double
dPtr Ptr Double
duPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgtsvx.f>
gtsvx ::
   Char {- ^ fact -} ->
   Char {- ^ trans -} ->
   Array ZeroInt Double {- ^ dl -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ du -} ->
   IOArray ZeroInt Double {- ^ dlf -} ->
   IOArray ZeroInt Double {- ^ df -} ->
   IOArray ZeroInt Double {- ^ duf -} ->
   IOArray ZeroInt Double {- ^ du2 -} ->
   IOArray ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)
gtsvx :: Char
-> Char
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
gtsvx Char
fact Char
trans Array ZeroInt Double
dl Array ZeroInt Double
d Array ZeroInt Double
du IOArray ZeroInt Double
dlf IOArray ZeroInt Double
df IOArray ZeroInt Double
duf IOArray ZeroInt Double
du2 IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
-> IO
     (Array (ZeroInt, 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, ZeroInt) Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
-> IO
     (Array (ZeroInt, ZeroInt) 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) 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) 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) 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) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Double
dlPtr <- Array ZeroInt Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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
dl
      Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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 Double
duPtr <- Array ZeroInt Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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
du
      Ptr Double
dlfPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, 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
dlf
      Ptr Double
dfPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, 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
df
      Ptr Double
dufPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, 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
duf
      Ptr Double
du2Ptr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, 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
du2
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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 Double
bPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, 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, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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) 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) 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) 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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 CInt
infoPtr <- FortranIO
  (Array (ZeroInt, 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, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) 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 Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gtsvx Ptr CChar
factPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dlPtr Ptr Double
dPtr Ptr Double
duPtr Ptr Double
dlfPtr Ptr Double
dfPtr Ptr Double
dufPtr Ptr Double
du2Ptr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
     Array ZeroInt Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
x
         IO
  (Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Double
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgttrf.f>
gttrf ::
   IOArray ZeroInt Double {- ^ dl -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ du -} ->
   IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
gttrf :: IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
gttrf IOArray ZeroInt Double
dl IOArray ZeroInt Double
d IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
du2 <- 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
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 Double, Array ZeroInt CInt, Int)
  IO
  (Array ZeroInt Double, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array ZeroInt CInt, Int)
   IO
   (Array ZeroInt Double, Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt Double, Array ZeroInt CInt, Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
dlPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt 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
dl
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt 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
duPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt 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
du
      Ptr Double
du2Ptr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt 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
du2
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt 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 Double, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Double, Array ZeroInt CInt, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gttrf Ptr CInt
nPtr Ptr Double
dlPtr Ptr Double
dPtr Ptr Double
duPtr Ptr Double
du2Ptr Ptr CInt
ipivPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt CInt, Int)
      IO
      (Array ZeroInt Double, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array ZeroInt CInt
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt CInt, Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt CInt
      -> Int -> (Array ZeroInt Double, Array ZeroInt CInt, Int))
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
du2
         IO
  (Array ZeroInt CInt
   -> Int -> (Array ZeroInt Double, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO (Int -> (Array ZeroInt Double, Array ZeroInt CInt, Int))
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 Double, Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgttrs.f>
gttrs ::
   Char {- ^ trans -} ->
   Array ZeroInt Double {- ^ dl -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ du -} ->
   Array ZeroInt Double {- ^ du2 -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
gttrs :: Char
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
gttrs Char
trans Array ZeroInt Double
dl Array ZeroInt Double
d Array ZeroInt Double
du Array ZeroInt Double
du2 Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
dlPtr <- 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
dl
      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 Double
duPtr <- 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
du
      Ptr Double
du2Ptr <- 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
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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gttrs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dlPtr Ptr Double
dPtr Ptr Double
duPtr Ptr Double
du2Ptr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgtts2.f>
gtts2 ::
   Int {- ^ itrans -} ->
   Array ZeroInt Double {- ^ dl -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ du -} ->
   Array ZeroInt Double {- ^ du2 -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO ()
gtts2 :: Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Double
-> IO ()
gtts2 Int
itrans Array ZeroInt Double
dl Array ZeroInt Double
d Array ZeroInt Double
du Array ZeroInt Double
du2 Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
dlPtr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
dl
      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 Double
duPtr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
du
      Ptr Double
du2Ptr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt 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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      IO () -> ContT () IO ()
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 Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.gtts2 Ptr CInt
itransPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dlPtr Ptr Double
dPtr Ptr Double
duPtr Ptr Double
du2Ptr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbev.f>
sbev ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Int {- ^ ldz -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)
sbev :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
sbev Char
jobz Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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) Double, Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, 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
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, 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
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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
work
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.sbev Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
wPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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
z
         IO
  (Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbevd.f>
sbevd ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Int {- ^ ldz -} ->
   Int {- ^ workSize -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)
sbevd :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
sbevd Char
jobz Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) Double
ab Int
ldz Int
workSize Int
lwork Int
liwork = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
   ContT
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, 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
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, 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
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, 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 Double, 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
iwork
      Ptr CInt
liworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sbevd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
wPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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
z
         IO
  (Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbevx.f>
sbevx ::
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Int {- ^ ldq -} ->
   Double {- ^ vl -} ->
   Double {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Double {- ^ abstol -} ->
   Int {- ^ m -} ->
   Int {- ^ ldz -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)
sbevx :: Char
-> Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
sbevx Char
jobz Char
range Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray (ZeroInt, ZeroInt) Double
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,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
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) Double, Int, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sbevx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr 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 Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Int
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Int
 -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
     Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
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
q
         IO
  (Int
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
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
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
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) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbgst.f>
sbgst ::
   Char {- ^ vect -} ->
   Char {- ^ uplo -} ->
   Int {- ^ ka -} ->
   Int {- ^ kb -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ bb -} ->
   Int {- ^ ldx -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Int)
sbgst :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
sbgst Char
vect Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) Double
ab Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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
"sbgst: n == bbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bbDim0)
   IOArray (ZeroInt, ZeroInt) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldx
   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, ZeroInt) Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
vectPtr <- Char
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
vect
      Ptr CChar
uploPtr <- Char
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kaPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ka
      Ptr CInt
kbPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
      Ptr Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Double
bbPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
bb
      Ptr CInt
ldbbPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbb
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
      Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.sbgst Ptr CChar
vectPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
bbPtr Ptr CInt
ldbbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (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
x
         IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbgv.f>
sbgv ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ ka -} ->
   Int {- ^ kb -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ bb -} ->
   Int {- ^ ldz -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)
sbgv :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
sbgv Char
jobz Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) Double
ab IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
"sbgv: 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) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt Double
work <- 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) Double, Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
      Ptr Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, 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
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Double
bbPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, 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
bb
      Ptr CInt
ldbbPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, 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
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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
work
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.sbgv Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
bbPtr Ptr CInt
ldbbPtr Ptr Double
wPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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
z
         IO
  (Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbgvd.f>
sbgvd ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ ka -} ->
   Int {- ^ kb -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ bb -} ->
   Int {- ^ ldz -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)
sbgvd :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
sbgvd Char
jobz Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) Double
ab IOArray (ZeroInt, ZeroInt) Double
bb Int
ldz Int
lwork Int
liwork = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
"sbgvd: 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) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
   ContT
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
      Ptr Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, 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
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Double
bbPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, 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
bb
      Ptr CInt
ldbbPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
w
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, 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
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, 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 Double, 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
iwork
      Ptr CInt
liworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sbgvd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
bbPtr Ptr CInt
ldbbPtr Ptr Double
wPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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
z
         IO
  (Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbgvx.f>
sbgvx ::
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   Char {- ^ uplo -} ->
   Int {- ^ ka -} ->
   Int {- ^ kb -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ bb -} ->
   Int {- ^ ldq -} ->
   Double {- ^ vl -} ->
   Double {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Double {- ^ abstol -} ->
   Int {- ^ ldz -} ->
   Int {- ^ m -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)
sbgvx :: Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
sbgvx Char
jobz Char
range Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) Double
ab IOArray (ZeroInt, ZeroInt) Double
bb Int
ldq Double
vl Double
vu Int
il Int
iu Double
abstol Int
ldz Int
m = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
"sbgvx: n == bbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bbDim0)
   IOArray (ZeroInt, ZeroInt) Double
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt Double
work <- 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
m
   ContT
  (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
      Ptr Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Double
bbPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
bb
      Ptr CInt
ldbbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbb
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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) Double, Int, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sbgvx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
bbPtr Ptr CInt
ldbbPtr Ptr 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 Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Int
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Int
 -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
     Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
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
q
         IO
  (Int
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
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
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
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) Double, Int, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Int, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsbtrd.f>
sbtrd ::
   Char {- ^ vect -} ->
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
sbtrd :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
sbtrd Char
vect Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) Double
ab IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
"sbtrd: 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 Double
work <- 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
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 Double
abPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
qPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.sbtrd Ptr CChar
vectPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyev.f>
syev ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Int)
syev :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Int)
syev Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.syev Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
wPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyevd.f>
syevd ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ workSize -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Double, Int)
syevd :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Double, Int)
syevd Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) Double
a Int
workSize Int
lwork Int
liwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (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 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.syevd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
wPtr Ptr Double
workPtr Ptr CInt
lworkPtr 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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyevr.f>
syevr ::
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Double {- ^ vl -} ->
   Double {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Double {- ^ abstol -} ->
   Int {- ^ m -} ->
   Int {- ^ ldz -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)
syevr :: Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> Int
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
syevr Char
jobz Char
range Char
uplo IOArray (ZeroInt, ZeroInt) Double
a Double
vl Double
vu Int
il Int
iu Double
abstol Int
m Int
ldz Int
lwork Int
liwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
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 (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] -> Int
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 (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
   ContT
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double,
    Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) Double,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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) 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
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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) Double,
      Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.syevr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr 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 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) Double,
   Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyevx.f>
syevx ::
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Double {- ^ vl -} ->
   Double {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Double {- ^ abstol -} ->
   Int {- ^ m -} ->
   Int {- ^ ldz -} ->
   Int {- ^ lwork -} ->
   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)
syevx :: Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
syevx Char
jobz Char
range Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,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] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double,
    Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) Double,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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) 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
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) Double,
      Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.syevx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr 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 Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsygs2.f>
sygs2 ::
   Int {- ^ itype -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
sygs2 :: Int
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IO Int
sygs2 Int
itype Char
uplo IOArray (ZeroInt, ZeroInt) Double
a Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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) 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
"sygs2: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itypePtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sygs2 Ptr CInt
itypePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsygst.f>
sygst ::
   Int {- ^ itype -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
sygst :: Int
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IO Int
sygst Int
itype Char
uplo IOArray (ZeroInt, ZeroInt) Double
a Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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) 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
"sygst: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itypePtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sygst Ptr CInt
itypePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsygv.f>
sygv ::
   Int {- ^ itype -} ->
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Int)
sygv :: Int
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Int)
sygv Int
itype Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
"sygv: 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
bPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sygv Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
wPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsygvd.f>
sygvd ::
   Int {- ^ itype -} ->
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Double, Int)
sygvd :: Int
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IO (Array ZeroInt Double, Int)
sygvd Int
itype Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) Double
b Int
lwork Int
liwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
"sygvd: 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 (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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
bPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (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 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sygvd Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
wPtr Ptr Double
workPtr Ptr CInt
lworkPtr 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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsygvx.f>
sygvx ::
   Int {- ^ itype -} ->
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Double {- ^ vl -} ->
   Double {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Double {- ^ abstol -} ->
   Int {- ^ m -} ->
   Int {- ^ ldz -} ->
   Int {- ^ lwork -} ->
   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)
sygvx :: Int
-> Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
sygvx Int
itype Char
jobz Char
range Char
uplo IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
"sygvx: 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) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,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] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double,
    Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) Double,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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) 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
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) Double,
      Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sygvx Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr 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 Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsfrk.f>
sfrk ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Int {- ^ n -} ->
   Int {- ^ k -} ->
   Double {- ^ alpha -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Double {- ^ beta -} ->
   IOArray ZeroInt Double {- ^ c -} ->
   IO ()
sfrk :: Char
-> Char
-> Char
-> Int
-> Int
-> Double
-> Array (ZeroInt, ZeroInt) Double
-> Double
-> IOArray ZeroInt Double
-> IO ()
sfrk Char
transr Char
uplo Char
trans Int
n Int
k Double
alpha Array (ZeroInt, ZeroInt) Double
a Double
beta IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
c
   let _ka :: Int
_ka = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let _nt :: Int
_nt = Int
cDim0
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transrPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      Ptr CChar
uploPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
transPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr Double
alphaPtr <- Double -> FortranIO () (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
alpha
      Ptr Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO () (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 () (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 Double
cPtr <- IOArray ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
c
      IO () -> ContT () IO ()
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 CInt
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.sfrk Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
alphaPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
betaPtr Ptr Double
cPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dhgeqz.f>
hgeqz ::
   Char {- ^ job -} ->
   Char {- ^ compq -} ->
   Char {- ^ compz -} ->
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ t -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)
hgeqz :: Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
hgeqz Char
job Char
compq Char
compz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) Double
h IOArray (ZeroInt, ZeroInt) Double
t IOArray (ZeroInt, ZeroInt) Double
q IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
alphar <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
alphai <- 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int)
  IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int)
-> IO
     (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,
    Int)
   IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Int)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
      Ptr CChar
compqPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compq
      Ptr CChar
compzPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iloPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr Double
hPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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, ZeroInt) Double
h
      Ptr CInt
ldhPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr Double
tPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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, ZeroInt) Double
t
      Ptr CInt
ldtPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr Double
alpharPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
alphar
      Ptr Double
alphaiPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
alphai
      Ptr Double
betaPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
beta
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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 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,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (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 CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hgeqz Ptr CChar
jobPtr Ptr CChar
compqPtr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
hPtr Ptr CInt
ldhPtr Ptr Double
tPtr Ptr CInt
ldtPtr Ptr Double
alpharPtr Ptr Double
alphaiPtr Ptr Double
betaPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int)
      IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     (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
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (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, Int))
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
alphar
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (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, Int))
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
alphai
         IO
  (Array ZeroInt Double
   -> Int
   -> (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, Int))
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
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspev.f>
spev ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   Int {- ^ ldz -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)
spev :: Char
-> Char
-> Int
-> IOArray ZeroInt Double
-> Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
spev Char
jobz Char
uplo Int
n IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
ap
   String -> Bool -> IO ()
Call.assert String
"spev: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt Double
work <- 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) Double, Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
apPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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
ap
      Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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 Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, 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
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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
work
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.spev Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
wPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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
z
         IO
  (Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspevd.f>
spevd ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   Int {- ^ ldz -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)
spevd :: Char
-> Char
-> Int
-> IOArray ZeroInt Double
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
spevd Char
jobz Char
uplo Int
n IOArray ZeroInt Double
ap Int
ldz Int
lwork Int
liwork = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
ap
   String -> Bool -> IO ()
Call.assert String
"spevd: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
   ContT
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
apPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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
ap
      Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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 Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, 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
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, 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 Double, 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
iwork
      Ptr CInt
liworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spevd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
wPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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
z
         IO
  (Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspevx.f>
spevx ::
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   Double {- ^ vl -} ->
   Double {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Double {- ^ abstol -} ->
   Int {- ^ m -} ->
   Int {- ^ ldz -} ->
   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)
spevx :: Char
-> Char
-> Char
-> Int
-> IOArray ZeroInt Double
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
spevx Char
jobz Char
range Char
uplo Int
n IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
ap
   String -> Bool -> IO ()
Call.assert String
"spevx: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,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
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double,
    Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) Double,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
apPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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
ap
      Ptr Double
vlPtr <- Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) Double,
      Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spevx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Double
abstolPtr Ptr CInt
mPtr Ptr Double
wPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspgst.f>
spgst ::
   Int {- ^ itype -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   Array ZeroInt Double {- ^ bp -} ->
   IO (Int)
spgst :: Int
-> Char
-> Int
-> IOArray ZeroInt Double
-> Array ZeroInt Double
-> IO Int
spgst Int
itype Char
uplo Int
n IOArray ZeroInt Double
ap Array ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
bp
   String -> Bool -> IO ()
Call.assert String
"spgst: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"spgst: n*(n+1)`div`2 == bpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bpDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itypePtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
apPtr <- 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
ap
      Ptr Double
bpPtr <- 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
bp
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
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 Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.spgst Ptr CInt
itypePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
bpPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspgv.f>
spgv ::
   Int {- ^ itype -} ->
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   IOArray ZeroInt Double {- ^ bp -} ->
   Int {- ^ ldz -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)
spgv :: Int
-> Char
-> Char
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
spgv Int
itype Char
jobz Char
uplo Int
n IOArray ZeroInt Double
ap IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
bp
   String -> Bool -> IO ()
Call.assert String
"spgv: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"spgv: n*(n+1)`div`2 == bpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bpDim0)
   IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt Double
work <- 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) Double, Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itypePtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
apPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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
ap
      Ptr Double
bpPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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
bp
      Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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 Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, 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
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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
work
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.spgv Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
bpPtr Ptr Double
wPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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
z
         IO
  (Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspgvd.f>
spgvd ::
   Int {- ^ itype -} ->
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   IOArray ZeroInt Double {- ^ bp -} ->
   Int {- ^ ldz -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)
spgvd :: Int
-> Char
-> Char
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
spgvd Int
itype Char
jobz Char
uplo Int
n IOArray ZeroInt Double
ap IOArray ZeroInt Double
bp Int
ldz Int
lwork Int
liwork = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
bp
   String -> Bool -> IO ()
Call.assert String
"spgvd: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"spgvd: n*(n+1)`div`2 == bpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bpDim0)
   IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
   ContT
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itypePtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
apPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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
ap
      Ptr Double
bpPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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
bp
      Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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 Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, 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
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, 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 Double, 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
iwork
      Ptr CInt
liworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spgvd Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
bpPtr Ptr Double
wPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
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
z
         IO
  (Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspgvx.f>
spgvx ::
   Int {- ^ itype -} ->
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   IOArray ZeroInt Double {- ^ bp -} ->
   Double {- ^ vl -} ->
   Double {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Double {- ^ abstol -} ->
   Int {- ^ m -} ->
   Int {- ^ ldz -} ->
   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)
spgvx :: Int
-> Char
-> Char
-> Char
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
spgvx Int
itype Char
jobz Char
range Char
uplo Int
n IOArray ZeroInt Double
ap IOArray ZeroInt Double
bp 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
bp
   String -> Bool -> IO ()
Call.assert String
"spgvx: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"spgvx: n*(n+1)`div`2 == bpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bpDim0)
   IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,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
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double,
    Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) Double,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
apPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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
ap
      Ptr Double
bpPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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
bp
      Ptr Double
vlPtr <- Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) Double,
      Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> 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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spgvx Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
bpPtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Double
abstolPtr Ptr CInt
mPtr Ptr Double
wPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsptrd.f>
sptrd ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)
sptrd :: Char
-> Int
-> IOArray ZeroInt Double
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
sptrd Char
uplo Int
n IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
ap
   String -> Bool -> IO ()
Call.assert String
"sptrd: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt 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 Double
tau <- 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)
   ContT
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int)
  IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int)
-> IO
     (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,
    Int)
   IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Int)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
-> IO
     (Array ZeroInt Double, 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, 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, Array ZeroInt Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
apPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
ap
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
d
      Ptr Double
ePtr <- IOArray ZeroInt Double
-> FortranIO
     (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
e
      Ptr Double
tauPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
tau
      Ptr CInt
infoPtr <- FortranIO
  (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,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.sptrd Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
tauPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int)
      IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     (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
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (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, Int))
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 Double
   -> Int
   -> (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, Int))
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 Double
   -> Int
   -> (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, Int))
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
tau
         IO
  (Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dhsein.f>
hsein ::
   Char {- ^ side -} ->
   Char {- ^ eigsrc -} ->
   Char {- ^ initv -} ->
   IOArray ZeroInt Bool {- ^ select -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ h -} ->
   IOArray ZeroInt Double {- ^ wr -} ->
   Array ZeroInt Double {- ^ wi -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ vl -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ vr -} ->
   IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
hsein :: Char
-> Char
-> Char
-> IOArray ZeroInt Bool
-> Array (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
hsein Char
side Char
eigsrc Char
initv IOArray ZeroInt Bool
select Array (ZeroInt, ZeroInt) Double
h IOArray ZeroInt Double
wr Array ZeroInt Double
wi IOArray (ZeroInt, ZeroInt) Double
vl IOArray (ZeroInt, ZeroInt) 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
$ IOArray ZeroInt Bool -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Bool
select
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
h
   let wrDim0 :: Int
wrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
wr
   let wiDim0 :: Int
wiDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
wi
   let (Int
vlDim0,Int
vlDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 == wrDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wrDim0)
   String -> Bool -> IO ()
Call.assert String
"hsein: n == wiDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wiDim0)
   String -> Bool -> IO ()
Call.assert String
"hsein: mm == vrDim0" (Int
mm Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vrDim0)
   IOArray ZeroInt Double
work <- 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
2)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
ifaill <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
   IOArray ZeroInt CInt
ifailr <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
   ContT
  (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
 -> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
eigsrcPtr <- Char
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
eigsrc
      Ptr CChar
initvPtr <- Char
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
initv
      Ptr Bool
selectPtr <- IOArray ZeroInt Bool
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr Bool)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Bool
select
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
hPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt CInt, 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
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 Double
wrPtr <- 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
wr
      Ptr Double
wiPtr <- Array ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
wi
      Ptr Double
vlPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
vrPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
ifaillPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifaill
      Ptr CInt
ifailrPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifailr
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) IO ()
forall (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> 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 Double
hPtr Ptr CInt
ldhPtr Ptr Double
wrPtr Ptr Double
wiPtr Ptr Double
vlPtr Ptr CInt
ldvlPtr Ptr Double
vrPtr Ptr CInt
ldvrPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr Double
workPtr Ptr CInt
ifaillPtr Ptr CInt
ifailrPtr Ptr CInt
infoPtr
      IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dhseqr.f>
hseqr ::
   Char {- ^ job -} ->
   Char {- ^ compz -} ->
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
hseqr :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
hseqr Char
job Char
compz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) Double
h IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
wr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
wi <- 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
  (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
jobPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
      Ptr CChar
compzPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
      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
iloPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr Double
hPtr <- IOArray (ZeroInt, 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, ZeroInt) Double
h
      Ptr CInt
ldhPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr Double
wrPtr <- 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
wr
      Ptr Double
wiPtr <- 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
wi
      Ptr Double
zPtr <- IOArray (ZeroInt, 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, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt 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, 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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hseqr Ptr CChar
jobPtr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
hPtr Ptr CInt
ldhPtr Ptr Double
wrPtr Ptr Double
wiPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
lworkPtr 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 (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 (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 (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
wr
         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 (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
wi
         IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/iladlc.f>
ilalc ::
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO CInt
ilalc :: Int -> Array (ZeroInt, ZeroInt) Double -> IO CInt
ilalc Int
m Array (ZeroInt, ZeroInt) 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) 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
   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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO CInt (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 CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      IO CInt -> ContT CInt IO CInt
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO CInt -> ContT CInt IO CInt) -> IO CInt -> ContT CInt IO CInt
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr CInt -> Ptr Double -> Ptr CInt -> IO CInt
FFI.ilalc Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/iladlr.f>
ilalr ::
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO CInt
ilalr :: Int -> Array (ZeroInt, ZeroInt) Double -> IO CInt
ilalr Int
m Array (ZeroInt, ZeroInt) 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) 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
   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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO CInt (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 CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      IO CInt -> ContT CInt IO CInt
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO CInt -> ContT CInt IO CInt) -> IO CInt -> ContT CInt IO CInt
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr CInt -> Ptr Double -> Ptr CInt -> IO CInt
FFI.ilalr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/disnan.f>
isnan ::
   Double {- ^ din -} ->
   IO Bool
isnan :: Double -> IO Bool
isnan Double
din = do
   ContT Bool IO Bool -> IO Bool
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Bool IO Bool -> IO Bool) -> ContT Bool IO Bool -> IO Bool
forall a b. (a -> b) -> a -> b
$ do
      Ptr Double
dinPtr <- Double -> FortranIO Bool (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
din
      IO Bool -> ContT Bool IO Bool
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> ContT Bool IO Bool) -> IO Bool -> ContT Bool IO Bool
forall a b. (a -> b) -> a -> b
$ Ptr Double -> IO Bool
FFI.isnan Ptr Double
dinPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlabad.f>
labad ::
   Double {- ^ small -} ->
   Double {- ^ large -} ->
   IO (Double, Double)
labad :: Double -> Double -> IO (Double, Double)
labad Double
small Double
large = do
   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 Double
smallPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
small
      Ptr Double
largePtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
large
      IO () -> ContT (Double, Double) IO ()
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 Double -> Ptr Double -> IO ()
FFI.labad Ptr Double
smallPtr Ptr Double
largePtr
      IO (Double, Double) -> ContT (Double, Double) IO (Double, Double)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Double -> (Double, Double))
-> IO Double -> IO (Double -> (Double, Double))
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
smallPtr
         IO (Double -> (Double, Double)) -> IO Double -> IO (Double, Double)
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
largePtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlabrd.f>
labrd ::
   Int {- ^ m -} ->
   Int {- ^ nb -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ ldx -} ->
   Int {- ^ ldy -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double)
labrd :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
labrd Int
m Int
nb IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
tauq <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
   IOArray ZeroInt Double
taup <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
   IOArray (ZeroInt, ZeroInt) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldx
   IOArray (ZeroInt, ZeroInt) Double
y <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double,
   Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
  IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
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, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double)
   IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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 Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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 Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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 Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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 Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
      Ptr Double
tauqPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
tauq
      Ptr Double
taupPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
taup
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Double
yPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
y
      Ptr CInt
ldyPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldy
      IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     ()
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, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.labrd Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nbPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
tauqPtr Ptr Double
taupPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
yPtr Ptr CInt
ldyPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
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, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double)
      IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> (Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt Double, Array ZeroInt Double,
     Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
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 Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
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 Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
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
tauq
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
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
taup
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
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
x
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
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
y

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlacn2.f>
lacn2 ::
   IOArray ZeroInt Double {- ^ x -} ->
   Double {- ^ est -} ->
   Int {- ^ kase -} ->
   IOArray ZeroInt CInt {- ^ isave -} ->
   IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
lacn2 :: IOArray ZeroInt Double
-> Double
-> Int
-> IOArray ZeroInt CInt
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
lacn2 IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
v <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
isgn <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
  IO
  (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
   IO
   (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
 -> IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
vPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
v
      Ptr Double
xPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
x
      Ptr CInt
isgnPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isgn
      Ptr Double
estPtr <- Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
est
      Ptr CInt
kasePtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kase
      Ptr CInt
isavePtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, 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 Double, Array ZeroInt CInt, Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt CInt, Double, Int) IO ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lacn2 Ptr CInt
nPtr Ptr Double
vPtr Ptr Double
xPtr Ptr CInt
isgnPtr Ptr Double
estPtr Ptr CInt
kasePtr Ptr CInt
isavePtr
      IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
      IO
      (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array ZeroInt CInt
 -> Double
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt CInt
      -> Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
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
v
         IO
  (Array ZeroInt CInt
   -> Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Double
      -> Int -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isgn
         IO
  (Double
   -> Int -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
-> IO Double
-> IO
     (Int -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
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 Double, Array ZeroInt CInt, Double, Int))
-> IO Int
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlacon.f>
lacon ::
   IOArray ZeroInt Double {- ^ x -} ->
   Double {- ^ est -} ->
   Int {- ^ kase -} ->
   IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
lacon :: IOArray ZeroInt Double
-> Double
-> Int
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
lacon IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
x
   let n :: Int
n = Int
xDim0
   IOArray ZeroInt Double
v <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
isgn <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
  IO
  (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
   IO
   (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
 -> IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
vPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
v
      Ptr Double
xPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
x
      Ptr CInt
isgnPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isgn
      Ptr Double
estPtr <- Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
est
      Ptr CInt
kasePtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kase
      IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt CInt, Double, Int) IO ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lacon Ptr CInt
nPtr Ptr Double
vPtr Ptr Double
xPtr Ptr CInt
isgnPtr Ptr Double
estPtr Ptr CInt
kasePtr
      IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
      IO
      (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array ZeroInt CInt
 -> Double
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt CInt
      -> Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
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
v
         IO
  (Array ZeroInt CInt
   -> Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Double
      -> Int -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isgn
         IO
  (Double
   -> Int -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
-> IO Double
-> IO
     (Int -> (Array ZeroInt Double, Array ZeroInt CInt, Double, Int))
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 Double, Array ZeroInt CInt, Double, Int))
-> IO Int
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlacpy.f>
lacpy ::
   Char {- ^ uplo -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ ldb -} ->
   IO (Array (ZeroInt,ZeroInt) Double)
lacpy :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) Double)
lacpy 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) Double
b <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldb
   ContT
  (Array (ZeroInt, ZeroInt) Double)
  IO
  (Array (ZeroInt, ZeroInt) Double)
-> IO (Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double)
   IO
   (Array (ZeroInt, ZeroInt) Double)
 -> IO (Array (ZeroInt, ZeroInt) Double))
-> ContT
     (Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double)
-> IO (Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
mPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) 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) 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) Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lacpy Ptr CChar
uploPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr
      IO (Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double)
      IO
      (Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> 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
b

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dladiv.f>
ladiv ::
   Double {- ^ a -} ->
   Double {- ^ b -} ->
   Double {- ^ c -} ->
   Double {- ^ d -} ->
   IO (Double, Double)
ladiv :: Double -> Double -> Double -> Double -> IO (Double, Double)
ladiv Double
a Double
b Double
c Double
d = do
   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 Double
aPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
a
      Ptr Double
bPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
b
      Ptr Double
cPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
c
      Ptr Double
dPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
d
      Ptr Double
pPtr <- FortranIO (Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
qPtr <- FortranIO (Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Double) IO ()
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 Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.ladiv Ptr Double
aPtr Ptr Double
bPtr Ptr Double
cPtr Ptr Double
dPtr Ptr Double
pPtr Ptr Double
qPtr
      IO (Double, Double) -> ContT (Double, Double) IO (Double, Double)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Double -> (Double, Double))
-> IO Double -> IO (Double -> (Double, Double))
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
pPtr
         IO (Double -> (Double, Double)) -> IO Double -> IO (Double, Double)
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
qPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlae2.f>
lae2 ::
   Double {- ^ a -} ->
   Double {- ^ b -} ->
   Double {- ^ c -} ->
   IO (Double, Double)
lae2 :: Double -> Double -> Double -> IO (Double, Double)
lae2 Double
a Double
b Double
c = do
   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 Double
aPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
a
      Ptr Double
bPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
b
      Ptr Double
cPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
c
      Ptr Double
rt1Ptr <- FortranIO (Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
rt2Ptr <- FortranIO (Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Double) IO ()
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 Double
-> Ptr Double -> Ptr Double -> Ptr Double -> Ptr Double -> IO ()
FFI.lae2 Ptr Double
aPtr Ptr Double
bPtr Ptr Double
cPtr Ptr Double
rt1Ptr Ptr Double
rt2Ptr
      IO (Double, Double) -> ContT (Double, Double) IO (Double, Double)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Double -> (Double, Double))
-> IO Double -> IO (Double -> (Double, Double))
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, Double)) -> IO Double -> IO (Double, Double)
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

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaebz.f>
laebz ::
   Int {- ^ ijob -} ->
   Int {- ^ nitmax -} ->
   Int {- ^ nbmin -} ->
   Double {- ^ abstol -} ->
   Double {- ^ reltol -} ->
   Double {- ^ pivmin -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ e -} ->
   Array ZeroInt Double {- ^ e2 -} ->
   IOArray ZeroInt CInt {- ^ nval -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IOArray ZeroInt Double {- ^ c -} ->
   IOArray (ZeroInt,ZeroInt) CInt {- ^ nab -} ->
   IO (Int, Int)
laebz :: Int
-> Int
-> Int
-> Double
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> IOArray ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) CInt
-> IO (Int, Int)
laebz Int
ijob Int
nitmax Int
nbmin Double
abstol Double
reltol Double
pivmin Array ZeroInt Double
d Array ZeroInt Double
e Array ZeroInt Double
e2 IOArray ZeroInt CInt
nval IOArray (ZeroInt, ZeroInt) Double
ab IOArray ZeroInt Double
c IOArray (ZeroInt, ZeroInt) CInt
nab = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt 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 e2Dim0 :: Int
e2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
e2
   let nvalDim0 :: Int
nvalDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
nval
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
ab
   let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
c
   let (Int
nabDim0,Int
nabDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) CInt -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) CInt
nab
   let n :: Int
n = Int
dDim0
   let minp :: Int
minp = Int
nvalDim0
   let mmax :: Int
mmax = Int
abDim1
   String -> Bool -> IO ()
Call.assert String
"laebz: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"laebz: n == e2Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
e2Dim0)
   String -> Bool -> IO ()
Call.assert String
"laebz: 2 == abDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
abDim0)
   String -> Bool -> IO ()
Call.assert String
"laebz: mmax == cDim0" (Int
mmax Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
   String -> Bool -> IO ()
Call.assert String
"laebz: 2 == nabDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
nabDim0)
   String -> Bool -> IO ()
Call.assert String
"laebz: mmax == nabDim1" (Int
mmax Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
nabDim1)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mmax
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mmax
   ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int) IO (Int, Int) -> IO (Int, Int))
-> ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
ijobPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
      Ptr CInt
nitmaxPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nitmax
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
mmaxPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mmax
      Ptr CInt
minpPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
minp
      Ptr CInt
nbminPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nbmin
      Ptr Double
abstolPtr <- Double -> FortranIO (Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
abstol
      Ptr Double
reltolPtr <- Double -> FortranIO (Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
reltol
      Ptr Double
pivminPtr <- Double -> FortranIO (Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
pivmin
      Ptr Double
dPtr <- Array ZeroInt Double -> FortranIO (Int, 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 (Int, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
e
      Ptr Double
e2Ptr <- Array ZeroInt Double -> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
e2
      Ptr CInt
nvalPtr <- IOArray ZeroInt CInt -> FortranIO (Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
nval
      Ptr Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
ab
      Ptr Double
cPtr <- 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
c
      Ptr CInt
moutPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
nabPtr <- IOArray (ZeroInt, ZeroInt) CInt -> FortranIO (Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) CInt
nab
      Ptr Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int) IO ())
-> IO () -> ContT (Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laebz Ptr CInt
ijobPtr Ptr CInt
nitmaxPtr Ptr CInt
nPtr Ptr CInt
mmaxPtr Ptr CInt
minpPtr Ptr CInt
nbminPtr Ptr Double
abstolPtr Ptr Double
reltolPtr Ptr Double
pivminPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
e2Ptr Ptr CInt
nvalPtr Ptr Double
abPtr Ptr Double
cPtr Ptr CInt
moutPtr Ptr CInt
nabPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Int -> Int -> (Int, Int)) -> IO Int -> IO (Int -> (Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
moutPtr)
         IO (Int -> (Int, Int)) -> IO Int -> IO (Int, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed0.f>
laed0 ::
   Int {- ^ icompq -} ->
   Int {- ^ qsiz -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   Int {- ^ ldqs -} ->
   Int {- ^ workSize -} ->
   Int {- ^ iworkSize -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Int)
laed0 :: Int
-> Int
-> IOArray ZeroInt Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
laed0 Int
icompq Int
qsiz IOArray ZeroInt Double
d Array ZeroInt Double
e IOArray (ZeroInt, ZeroInt) Double
q Int
ldqs Int
workSize Int
iworkSize = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt 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
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
qstore <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldqs
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
iworkSize
   ContT
  (Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
icompqPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
      Ptr CInt
qsizPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
qsiz
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) 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) 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 <- Array ZeroInt Double
-> FortranIO (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
e
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Double
qstorePtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
qstore
      Ptr CInt
ldqsPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldqs
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (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
iwork
      Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed0 Ptr CInt
icompqPtr Ptr CInt
qsizPtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr Double
qstorePtr Ptr CInt
ldqsPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (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
qstore
         IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed1.f>
laed1 ::
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   IOArray ZeroInt CInt {- ^ indxq -} ->
   Double {- ^ rho -} ->
   Int {- ^ cutpnt -} ->
   IO (Int)
laed1 :: IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt CInt
-> Double
-> Int
-> IO Int
laed1 IOArray ZeroInt Double
d IOArray (ZeroInt, ZeroInt) Double
q IOArray ZeroInt CInt
indxq Double
rho Int
cutpnt = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
q
   let indxqDim0 :: Int
indxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
indxq
   let n :: Int
n = Int
dDim0
   let ldq :: Int
ldq = Int
qDim1
   String -> Bool -> IO ()
Call.assert String
"laed1: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   String -> Bool -> IO ()
Call.assert String
"laed1: n == indxqDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
indxqDim0)
   IOArray ZeroInt 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
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nInt -> Int -> Int
forall a. Num a => a -> Int -> a
^!Int
2)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr 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
qPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr CInt
indxqPtr <- IOArray ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indxq
      Ptr Double
rhoPtr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rho
      Ptr CInt
cutpntPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
cutpnt
      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
iworkPtr <- IOArray ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed1 Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr CInt
indxqPtr Ptr Double
rhoPtr Ptr CInt
cutpntPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed2.f>
laed2 ::
   Int {- ^ n1 -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   IOArray ZeroInt CInt {- ^ indxq -} ->
   Double {- ^ rho -} ->
   Array ZeroInt Double {- ^ z -} ->
   IO (Int, Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int)
laed2 :: Int
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt CInt
-> Double
-> Array ZeroInt Double
-> IO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
laed2 Int
n1 IOArray ZeroInt Double
d IOArray (ZeroInt, ZeroInt) Double
q IOArray ZeroInt CInt
indxq Double
rho Array ZeroInt 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 (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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
q
   let indxqDim0 :: Int
indxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
indxq
   let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
z
   let n :: Int
n = Int
dDim0
   let ldq :: Int
ldq = Int
qDim1
   String -> Bool -> IO ()
Call.assert String
"laed2: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   String -> Bool -> IO ()
Call.assert String
"laed2: n == indxqDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
indxqDim0)
   String -> Bool -> IO ()
Call.assert String
"laed2: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt Double
dlamda <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
q2 <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
n1Int -> Int -> Int
forall a. Num a => a -> Int -> a
^!Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
n1)Int -> Int -> Int
forall a. Num a => a -> Int -> a
^!Int
2)
   IOArray ZeroInt CInt
indx <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
indxc <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
indxp <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
coltyp <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt, Array ZeroInt CInt, Int)
  IO
  (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
    Array ZeroInt CInt, Array ZeroInt CInt, Int)
   IO
   (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
    Array ZeroInt CInt, Array ZeroInt CInt, Int)
 -> IO
      (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> ContT
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
kPtr <- FortranIO
  (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt, Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
n1Ptr <- Int
-> FortranIO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n1
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      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
d
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      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, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr CInt
indxqPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indxq
      Ptr Double
rhoPtr <- Double
-> FortranIO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rho
      Ptr Double
zPtr <- Array ZeroInt Double
-> FortranIO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, 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 Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      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
dlamda
      Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      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
w
      Ptr Double
q2Ptr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      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
q2
      Ptr CInt
indxPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indx
      Ptr CInt
indxcPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indxc
      Ptr CInt
indxpPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indxp
      Ptr CInt
coltypPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
coltyp
      Ptr CInt
infoPtr <- FortranIO
  (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt, Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed2 Ptr CInt
kPtr Ptr CInt
nPtr Ptr CInt
n1Ptr Ptr Double
dPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr CInt
indxqPtr Ptr Double
rhoPtr Ptr Double
zPtr Ptr Double
dlamdaPtr Ptr Double
wPtr Ptr Double
q2Ptr Ptr CInt
indxPtr Ptr CInt
indxcPtr Ptr CInt
indxpPtr Ptr CInt
coltypPtr Ptr CInt
infoPtr
      IO
  (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
    Array ZeroInt CInt, Array ZeroInt CInt, Int)
 -> ContT
      (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Array ZeroInt CInt, Int)
      IO
      (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
     Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,)
         IO
  (Int
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Double
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Array ZeroInt CInt, Int))
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 Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Array ZeroInt CInt, Int))
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 Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Array ZeroInt CInt, Int))
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 Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Array ZeroInt CInt, Int))
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
q2
         IO
  (Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indx
         IO
  (Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indxc
         IO
  (Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indxp
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
coltyp
         IO
  (Int
   -> (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed3.f>
laed3 ::
   Int {- ^ n1 -} ->
   Int {- ^ ldq -} ->
   Double {- ^ rho -} ->
   IOArray ZeroInt Double {- ^ dlamda -} ->
   Array ZeroInt Double {- ^ q2 -} ->
   Array ZeroInt CInt {- ^ indx -} ->
   Array ZeroInt CInt {- ^ ctot -} ->
   IOArray ZeroInt Double {- ^ w -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt Double, Int)
laed3 :: Int
-> Int
-> Double
-> IOArray ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> IOArray ZeroInt Double
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
laed3 Int
n1 Int
ldq Double
rho IOArray ZeroInt Double
dlamda Array ZeroInt Double
q2 Array ZeroInt CInt
indx Array ZeroInt CInt
ctot IOArray ZeroInt Double
w = do
   let dlamdaDim0 :: Int
dlamdaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
dlamda
   let q2Dim0 :: Int
q2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
q2
   let indxDim0 :: Int
indxDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
indx
   let ctotDim0 :: Int
ctotDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ctot
   let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
w
   let k :: Int
k = Int
dlamdaDim0
   let n :: Int
n = Int
indxDim0
   String -> Int -> IO ()
Call.ignore String
"laed3: ldq2*n == q2Dim0" Int
q2Dim0
   String -> Bool -> IO ()
Call.assert String
"laed3: 4 == ctotDim0" (Int
4 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ctotDim0)
   String -> Bool -> IO ()
Call.assert String
"laed3: k == wDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
   IOArray ZeroInt Double
d <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq
   IOArray ZeroInt Double
s <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
n1Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)
   ContT
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt Double, Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt Double, Int)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt Double, Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt Double, Int)
 -> IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt Double, Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
kPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
n1Ptr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n1
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, 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
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, 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, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Double
rhoPtr <- Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rho
      Ptr Double
dlamdaPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, 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
dlamda
      Ptr Double
q2Ptr <- Array ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, 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
q2
      Ptr CInt
indxPtr <- Array ZeroInt CInt
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, 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
indx
      Ptr CInt
ctotPtr <- Array ZeroInt CInt
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, 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
ctot
      Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, 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
w
      Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, 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 CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array (ZeroInt, 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, ZeroInt) Double,
      Array ZeroInt Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.laed3 Ptr CInt
kPtr Ptr CInt
nPtr Ptr CInt
n1Ptr Ptr Double
dPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr Double
rhoPtr Ptr Double
dlamdaPtr Ptr Double
q2Ptr Ptr CInt
indxPtr Ptr CInt
ctotPtr Ptr Double
wPtr Ptr Double
sPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt Double, Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt Double, Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt Double, Int))
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array ZeroInt Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt Double, Int))
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, ZeroInt) Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt Double, Int))
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
q
         IO
  (Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt Double, Int))
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
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed4.f>
laed4 ::
   Int {- ^ i -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ z -} ->
   Double {- ^ rho -} ->
   IO (Array ZeroInt Double, Double, Int)
laed4 :: Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> IO (Array ZeroInt Double, Double, Int)
laed4 Int
i Array ZeroInt Double
d Array ZeroInt Double
z Double
rho = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array 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 n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"laed4: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt Double
delta <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Double, Double, Int)
  IO
  (Array ZeroInt Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Double, Int)
   IO
   (Array ZeroInt Double, Double, Int)
 -> IO (Array ZeroInt Double, Double, Int))
-> ContT
     (Array ZeroInt Double, Double, Int)
     IO
     (Array ZeroInt Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iPtr <- Int -> FortranIO (Array ZeroInt Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i
      Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO (Array ZeroInt Double, Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
d
      Ptr Double
zPtr <- Array ZeroInt Double
-> FortranIO (Array ZeroInt Double, 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
deltaPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
delta
      Ptr Double
rhoPtr <- Double
-> FortranIO (Array ZeroInt Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rho
      Ptr Double
dlamPtr <- FortranIO (Array ZeroInt Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Double, Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Double, Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Double, Int) IO ())
-> IO () -> ContT (Array ZeroInt Double, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.laed4 Ptr CInt
nPtr Ptr CInt
iPtr Ptr Double
dPtr Ptr Double
zPtr Ptr Double
deltaPtr Ptr Double
rhoPtr Ptr Double
dlamPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Double, Int)
-> ContT
     (Array ZeroInt Double, Double, Int)
     IO
     (Array ZeroInt Double, Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Double, Int)
 -> ContT
      (Array ZeroInt Double, Double, Int)
      IO
      (Array ZeroInt Double, Double, Int))
-> IO (Array ZeroInt Double, Double, Int)
-> ContT
     (Array ZeroInt Double, Double, Int)
     IO
     (Array ZeroInt Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Double -> Int -> (Array ZeroInt Double, Double, Int))
-> IO
     (Array ZeroInt Double
      -> Double -> Int -> (Array ZeroInt Double, Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Double
   -> Double -> Int -> (Array ZeroInt Double, Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Double -> Int -> (Array ZeroInt Double, Double, Int))
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
delta
         IO (Double -> Int -> (Array ZeroInt Double, Double, Int))
-> IO Double -> IO (Int -> (Array ZeroInt Double, Double, Int))
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
dlamPtr
         IO (Int -> (Array ZeroInt Double, Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed5.f>
laed5 ::
   Int {- ^ i -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ z -} ->
   Double {- ^ rho -} ->
   IO (Array ZeroInt Double, Double)
laed5 :: Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> IO (Array ZeroInt Double, Double)
laed5 Int
i Array ZeroInt Double
d Array ZeroInt Double
z Double
rho = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array 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
   String -> Bool -> IO ()
Call.assert String
"laed5: 2 == dDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
   String -> Bool -> IO ()
Call.assert String
"laed5: 2 == zDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt Double
delta <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
   ContT
  (Array ZeroInt Double, Double) IO (Array ZeroInt Double, Double)
-> IO (Array ZeroInt Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Double) IO (Array ZeroInt Double, Double)
 -> IO (Array ZeroInt Double, Double))
-> ContT
     (Array ZeroInt Double, Double) IO (Array ZeroInt Double, Double)
-> IO (Array ZeroInt Double, Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
iPtr <- Int -> FortranIO (Array ZeroInt Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i
      Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO (Array ZeroInt 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
zPtr <- Array ZeroInt Double
-> FortranIO (Array ZeroInt Double, Double) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
z
      Ptr Double
deltaPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
delta
      Ptr Double
rhoPtr <- Double -> FortranIO (Array ZeroInt Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rho
      Ptr Double
dlamPtr <- FortranIO (Array ZeroInt Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Double, Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Double) IO ())
-> IO () -> ContT (Array ZeroInt Double, Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.laed5 Ptr CInt
iPtr Ptr Double
dPtr Ptr Double
zPtr Ptr Double
deltaPtr Ptr Double
rhoPtr Ptr Double
dlamPtr
      IO (Array ZeroInt Double, Double)
-> ContT
     (Array ZeroInt Double, Double) IO (Array ZeroInt Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Double)
 -> ContT
      (Array ZeroInt Double, Double) IO (Array ZeroInt Double, Double))
-> IO (Array ZeroInt Double, Double)
-> ContT
     (Array ZeroInt Double, Double) IO (Array ZeroInt Double, Double)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double -> Double -> (Array ZeroInt Double, Double))
-> IO
     (Array ZeroInt Double -> Double -> (Array ZeroInt Double, Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt Double -> Double -> (Array ZeroInt Double, Double))
-> IO (Array ZeroInt Double)
-> IO (Double -> (Array ZeroInt Double, Double))
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
delta
         IO (Double -> (Array ZeroInt Double, Double))
-> IO Double -> IO (Array ZeroInt Double, Double)
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
dlamPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed6.f>
laed6 ::
   Int {- ^ kniter -} ->
   Bool {- ^ orgati -} ->
   Double {- ^ rho -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ z -} ->
   Double {- ^ finit -} ->
   IO (Double, Int)
laed6 :: Int
-> Bool
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> IO (Double, Int)
laed6 Int
kniter Bool
orgati Double
rho Array ZeroInt Double
d Array ZeroInt Double
z Double
finit = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array 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
   String -> Bool -> IO ()
Call.assert String
"laed6: 3 == dDim0" (Int
3 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
   String -> Bool -> IO ()
Call.assert String
"laed6: 3 == zDim0" (Int
3 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   ContT (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
kniterPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kniter
      Ptr Bool
orgatiPtr <- Bool -> FortranIO (Double, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
orgati
      Ptr Double
rhoPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rho
      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 Double
zPtr <- 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
z
      Ptr Double
finitPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
finit
      Ptr Double
tauPtr <- 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 (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 Bool
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.laed6 Ptr CInt
kniterPtr Ptr Bool
orgatiPtr Ptr Double
rhoPtr Ptr Double
dPtr Ptr Double
zPtr Ptr Double
finitPtr Ptr Double
tauPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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
tauPtr
         IO (Int -> (Double, Int)) -> IO Int -> IO (Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed7.f>
laed7 ::
   Int {- ^ icompq -} ->
   Int {- ^ qsiz -} ->
   Int {- ^ tlvls -} ->
   Int {- ^ curlvl -} ->
   Int {- ^ curpbm -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   Double {- ^ rho -} ->
   Int {- ^ cutpnt -} ->
   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 -} ->
   IO (Array ZeroInt CInt, Int)
laed7 :: Int
-> Int
-> Int
-> Int
-> Int
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Double
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt CInt, Int)
laed7 Int
icompq Int
qsiz Int
tlvls Int
curlvl Int
curpbm IOArray ZeroInt Double
d IOArray (ZeroInt, ZeroInt) Double
q Double
rho Int
cutpnt 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 = 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
qsizInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
icompqPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
qsizPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
qsiz
      Ptr CInt
tlvlsPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
tlvls
      Ptr CInt
curlvlPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
curlvl
      Ptr CInt
curpbmPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
curpbm
      Ptr 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 Double
qPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 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
rhoPtr <- Double -> FortranIO (Array ZeroInt CInt, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rho
      Ptr CInt
cutpntPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
cutpnt
      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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed7 Ptr CInt
icompqPtr Ptr CInt
nPtr Ptr CInt
qsizPtr Ptr CInt
tlvlsPtr Ptr CInt
curlvlPtr Ptr CInt
curpbmPtr Ptr Double
dPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr CInt
indxqPtr Ptr Double
rhoPtr Ptr CInt
cutpntPtr Ptr Double
qstorePtr Ptr CInt
qptrPtr Ptr CInt
prmptrPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr Double
givnumPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed8.f>
laed8 ::
   Int {- ^ icompq -} ->
   Int {- ^ qsiz -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   Array ZeroInt CInt {- ^ indxq -} ->
   Double {- ^ rho -} ->
   Int {- ^ cutpnt -} ->
   Array ZeroInt Double {- ^ z -} ->
   Int {- ^ ldq2 -} ->
   IO (Int, Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt Double, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Array ZeroInt CInt, Int)
laed8 :: Int
-> Int
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> Double
-> Int
-> Array ZeroInt Double
-> Int
-> IO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
laed8 Int
icompq Int
qsiz IOArray ZeroInt Double
d IOArray (ZeroInt, ZeroInt) Double
q Array ZeroInt CInt
indxq Double
rho Int
cutpnt Array ZeroInt Double
z Int
ldq2 = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
q
   let indxqDim0 :: Int
indxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
indxq
   let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
z
   let n :: Int
n = Int
dDim0
   let ldq :: Int
ldq = Int
qDim1
   String -> Bool -> IO ()
Call.assert String
"laed8: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   String -> Bool -> IO ()
Call.assert String
"laed8: n == indxqDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
indxqDim0)
   String -> Bool -> IO ()
Call.assert String
"laed8: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt Double
dlamda <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
q2 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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
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
   IOArray ZeroInt CInt
indxp <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
indx <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
  IO
  (Int, Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
-> IO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
    Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
    Array ZeroInt CInt, Int)
   IO
   (Int, Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
    Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
    Array ZeroInt CInt, Int)
 -> IO
      (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> ContT
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
-> IO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
icompqPtr <- Int
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
      Ptr CInt
kPtr <- FortranIO
  (Int, Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
qsizPtr <- Int
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
qsiz
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, 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
d
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, 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, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr CInt
indxqPtr <- Array ZeroInt CInt
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
indxq
      Ptr Double
rhoPtr <- Double
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, 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) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, 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) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, 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) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, 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
dlamda
      Ptr Double
q2Ptr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, 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, ZeroInt) Double
q2
      Ptr CInt
ldq2Ptr <- Int
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, 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) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, 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
w
      Ptr CInt
permPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
perm
      Ptr CInt
givptrPtr <- FortranIO
  (Int, Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
givcolPtr <- IOArray (ZeroInt, ZeroInt) CInt
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) CInt
givcol
      Ptr Double
givnumPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, 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, ZeroInt) Double
givnum
      Ptr CInt
indxpPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indxp
      Ptr CInt
indxPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indx
      Ptr CInt
infoPtr <- FortranIO
  (Int, Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed8 Ptr CInt
icompqPtr Ptr CInt
kPtr Ptr CInt
nPtr Ptr CInt
qsizPtr Ptr Double
dPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr CInt
indxqPtr Ptr Double
rhoPtr Ptr CInt
cutpntPtr Ptr Double
zPtr Ptr Double
dlamdaPtr Ptr Double
q2Ptr Ptr CInt
ldq2Ptr Ptr Double
wPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr Double
givnumPtr Ptr CInt
indxpPtr Ptr CInt
indxPtr Ptr CInt
infoPtr
      IO
  (Int, Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
-> ContT
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
    Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
    Array ZeroInt CInt, Int)
 -> ContT
      (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int)
      IO
      (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
-> ContT
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt Double
 -> Array ZeroInt CInt
 -> Int
 -> Array (ZeroInt, ZeroInt) CInt
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Double, Array ZeroInt Double,
     Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
     Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
     Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
     Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,)
         IO
  (Int
   -> Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO Double
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
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) Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
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) Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
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
q2
         IO
  (Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
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
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
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
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) CInt)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
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
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
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
  (Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indxp
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indx
         IO
  (Int
   -> (Int, Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt CInt, Int, Array (ZeroInt, ZeroInt) CInt,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaed9.f>
laed9 ::
   Int {- ^ kstart -} ->
   Int {- ^ kstop -} ->
   Int {- ^ n -} ->
   Int {- ^ ldq -} ->
   Double {- ^ rho -} ->
   Array ZeroInt Double {- ^ dlamda -} ->
   Array ZeroInt Double {- ^ w -} ->
   Int {- ^ lds -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)
laed9 :: Int
-> Int
-> Int
-> Int
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
laed9 Int
kstart Int
kstop Int
n Int
ldq Double
rho Array ZeroInt Double
dlamda Array ZeroInt Double
w Int
lds = do
   let dlamdaDim0 :: Int
dlamdaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
dlamda
   let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
w
   let k :: Int
k = Int
dlamdaDim0
   String -> Bool -> IO ()
Call.assert String
"laed9: k == wDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
   IOArray ZeroInt Double
d <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq
   IOArray (ZeroInt, ZeroInt) Double
s <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
k Int
lds
   ContT
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
kPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr CInt
kstartPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kstart
      Ptr CInt
kstopPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kstop
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Double
rhoPtr <- Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rho
      Ptr Double
dlamdaPtr <- Array ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
dlamda
      Ptr Double
wPtr <- Array ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
w
      Ptr Double
sPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      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
s
      Ptr CInt
ldsPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lds
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed9 Ptr CInt
kPtr Ptr CInt
kstartPtr Ptr CInt
kstopPtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr Double
rhoPtr Ptr Double
dlamdaPtr Ptr Double
wPtr Ptr Double
sPtr Ptr CInt
ldsPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
q
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
s
         IO
  (Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaeda.f>
laeda ::
   Int {- ^ n -} ->
   Int {- ^ tlvls -} ->
   Int {- ^ curlvl -} ->
   Int {- ^ curpbm -} ->
   Array ZeroInt CInt {- ^ prmptr -} ->
   Array ZeroInt CInt {- ^ perm -} ->
   Array ZeroInt CInt {- ^ givptr -} ->
   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ givnum -} ->
   Array ZeroInt Double {- ^ q -} ->
   Array ZeroInt CInt {- ^ qptr -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
laeda :: Int
-> Int
-> Int
-> Int
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
laeda Int
n Int
tlvls Int
curlvl Int
curpbm Array ZeroInt CInt
prmptr Array ZeroInt CInt
perm Array ZeroInt CInt
givptr Array (ZeroInt, ZeroInt) CInt
givcol Array (ZeroInt, ZeroInt) Double
givnum Array ZeroInt Double
q Array ZeroInt CInt
qptr = do
   let prmptrDim0 :: Int
prmptrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
prmptr
   let permDim0 :: Int
permDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
perm
   let givptrDim0 :: Int
givptrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
givptr
   let (Int
givcolDim0,Int
givcolDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) CInt -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) CInt
givcol
   let (Int
givnumDim0,Int
givnumDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
givnum
   let qDim0 :: Int
qDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
q
   let qptrDim0 :: Int
qptrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
qptr
   let nlgn :: Int
nlgn = Int
prmptrDim0
   String -> Bool -> IO ()
Call.assert String
"laeda: nlgn == permDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
permDim0)
   String -> Bool -> IO ()
Call.assert String
"laeda: nlgn == givptrDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givptrDim0)
   String -> Bool -> IO ()
Call.assert String
"laeda: nlgn == givcolDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givcolDim0)
   String -> Bool -> IO ()
Call.assert String
"laeda: 2 == givcolDim1" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givcolDim1)
   String -> Bool -> IO ()
Call.assert String
"laeda: nlgn == givnumDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givnumDim0)
   String -> Bool -> IO ()
Call.assert String
"laeda: 2 == givnumDim1" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givnumDim1)
   String -> Bool -> IO ()
Call.assert String
"laeda: n^!2 == qDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> Int -> a
^!Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   String -> Bool -> IO ()
Call.assert String
"laeda: n+2 == qptrDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qptrDim0)
   IOArray ZeroInt Double
z <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
ztemp <- 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 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
tlvlsPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
tlvls
      Ptr CInt
curlvlPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
curlvl
      Ptr CInt
curpbmPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
curpbm
      Ptr CInt
prmptrPtr <- 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
prmptr
      Ptr CInt
permPtr <- 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
perm
      Ptr CInt
givptrPtr <- 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
givptr
      Ptr CInt
givcolPtr <- Array (ZeroInt, 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, ZeroInt) CInt
givcol
      Ptr Double
givnumPtr <- Array (ZeroInt, 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, ZeroInt) Double
givnum
      Ptr Double
qPtr <- 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
q
      Ptr CInt
qptrPtr <- 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
qptr
      Ptr Double
zPtr <- 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
z
      Ptr Double
ztempPtr <- 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
ztemp
      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 (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 CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.laeda Ptr CInt
nPtr Ptr CInt
tlvlsPtr Ptr CInt
curlvlPtr Ptr CInt
curpbmPtr Ptr CInt
prmptrPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr Double
givnumPtr Ptr Double
qPtr Ptr CInt
qptrPtr Ptr Double
zPtr Ptr Double
ztempPtr 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 (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 (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 (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
z
         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 (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
ztemp
         IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaein.f>
laein ::
   Bool {- ^ rightv -} ->
   Bool {- ^ noinit -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ h -} ->
   Double {- ^ wr -} ->
   Double {- ^ wi -} ->
   IOArray ZeroInt Double {- ^ vr -} ->
   IOArray ZeroInt Double {- ^ vi -} ->
   Int {- ^ ldb -} ->
   Double {- ^ eps3 -} ->
   Double {- ^ smlnum -} ->
   Double {- ^ bignum -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Int)
laein :: Bool
-> Bool
-> Array (ZeroInt, ZeroInt) Double
-> Double
-> Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Int
-> Double
-> Double
-> Double
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
laein Bool
rightv Bool
noinit Array (ZeroInt, ZeroInt) Double
h Double
wr Double
wi IOArray ZeroInt Double
vr IOArray ZeroInt Double
vi Int
ldb Double
eps3 Double
smlnum Double
bignum = do
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
h
   let vrDim0 :: Int
vrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
vr
   let viDim0 :: Int
viDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
vi
   let n :: Int
n = Int
hDim0
   let ldh :: Int
ldh = Int
hDim1
   String -> Bool -> IO ()
Call.assert String
"laein: n == vrDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vrDim0)
   String -> Bool -> IO ()
Call.assert String
"laein: n == viDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
viDim0)
   IOArray (ZeroInt, ZeroInt) Double
b <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldb
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
rightvPtr <- Bool -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
rightv
      Ptr Bool
noinitPtr <- Bool -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
noinit
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
hPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
h
      Ptr CInt
ldhPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr Double
wrPtr <- Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
wr
      Ptr Double
wiPtr <- Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
wi
      Ptr Double
vrPtr <- IOArray ZeroInt Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
vr
      Ptr Double
viPtr <- IOArray ZeroInt Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
vi
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
      Ptr Double
eps3Ptr <- Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
eps3
      Ptr Double
smlnumPtr <- Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
smlnum
      Ptr Double
bignumPtr <- Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
bignum
      Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.laein Ptr Bool
rightvPtr Ptr Bool
noinitPtr Ptr CInt
nPtr Ptr Double
hPtr Ptr CInt
ldhPtr Ptr Double
wrPtr Ptr Double
wiPtr Ptr Double
vrPtr Ptr Double
viPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
workPtr Ptr Double
eps3Ptr Ptr Double
smlnumPtr Ptr Double
bignumPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (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
b
         IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaev2.f>
laev2 ::
   Double {- ^ a -} ->
   Double {- ^ b -} ->
   Double {- ^ c -} ->
   IO (Double, Double, Double, Double)
laev2 :: Double -> Double -> Double -> IO (Double, Double, Double, Double)
laev2 Double
a Double
b Double
c = do
   ContT
  (Double, Double, Double, Double)
  IO
  (Double, Double, Double, Double)
-> IO (Double, Double, Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Double, Double, Double, Double)
   IO
   (Double, Double, Double, Double)
 -> IO (Double, Double, Double, Double))
-> ContT
     (Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double)
-> IO (Double, Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Double
aPtr <- Double -> FortranIO (Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
a
      Ptr Double
bPtr <- Double -> FortranIO (Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
b
      Ptr Double
cPtr <- Double -> FortranIO (Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
c
      Ptr Double
rt1Ptr <- FortranIO (Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
rt2Ptr <- FortranIO (Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
cs1Ptr <- FortranIO (Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
sn1Ptr <- FortranIO (Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Double, Double, Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Double, Double, Double) IO ())
-> IO () -> ContT (Double, Double, Double, Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.laev2 Ptr Double
aPtr Ptr Double
bPtr Ptr Double
cPtr Ptr Double
rt1Ptr Ptr Double
rt2Ptr Ptr Double
cs1Ptr Ptr Double
sn1Ptr
      IO (Double, Double, Double, Double)
-> ContT
     (Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double, Double, Double)
 -> ContT
      (Double, Double, Double, Double)
      IO
      (Double, Double, Double, Double))
-> IO (Double, Double, Double, Double)
-> ContT
     (Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ (Double
 -> Double -> Double -> Double -> (Double, Double, Double, Double))
-> IO
     (Double
      -> Double -> Double -> Double -> (Double, Double, Double, Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Double
   -> Double -> Double -> Double -> (Double, Double, Double, Double))
-> IO Double
-> IO
     (Double -> Double -> Double -> (Double, Double, Double, Double))
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 -> Double -> (Double, Double, Double, Double))
-> IO Double
-> IO (Double -> Double -> (Double, Double, Double, Double))
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 -> Double -> (Double, Double, Double, Double))
-> IO Double -> IO (Double -> (Double, Double, Double, Double))
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 (Double -> (Double, Double, Double, Double))
-> IO Double -> IO (Double, Double, Double, Double)
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
sn1Ptr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaexc.f>
laexc ::
   Bool {- ^ wantq -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ t -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   Int {- ^ j1 -} ->
   Int {- ^ n1 -} ->
   Int {- ^ n2 -} ->
   IO (Int)
laexc :: Bool
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> IO Int
laexc Bool
wantq IOArray (ZeroInt, ZeroInt) Double
t IOArray (ZeroInt, ZeroInt) Double
q Int
j1 Int
n1 Int
n2 = do
   let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
"laexc: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt 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 Bool
wantqPtr <- Bool -> FortranIO Int (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantq
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
tPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
t
      Ptr CInt
ldtPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr CInt
j1Ptr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
j1
      Ptr CInt
n1Ptr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n1
      Ptr CInt
n2Ptr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n2
      Ptr 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 (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.laexc Ptr Bool
wantqPtr Ptr CInt
nPtr Ptr Double
tPtr Ptr CInt
ldtPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr CInt
j1Ptr Ptr CInt
n1Ptr Ptr CInt
n2Ptr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlag2.f>
lag2 ::
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Double {- ^ safmin -} ->
   IO (Double, Double, Double, Double, Double)
lag2 :: Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Double
-> IO (Double, Double, Double, Double, Double)
lag2 Array (ZeroInt, ZeroInt) Double
a Array (ZeroInt, ZeroInt) Double
b Double
safmin = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
b
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"lag2: 2 == aDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
   String -> Bool -> IO ()
Call.assert String
"lag2: 2 == bDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   ContT
  (Double, Double, Double, Double, Double)
  IO
  (Double, Double, Double, Double, Double)
-> IO (Double, Double, Double, Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Double, Double, Double, Double, Double)
   IO
   (Double, Double, Double, Double, Double)
 -> IO (Double, Double, Double, Double, Double))
-> ContT
     (Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double)
-> IO (Double, Double, Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Double, Double, 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 (Double, Double, Double, Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Double, Double, 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 (Double, Double, Double, Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
safminPtr <- Double
-> FortranIO (Double, Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
safmin
      Ptr Double
scale1Ptr <- FortranIO (Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
scale2Ptr <- FortranIO (Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
wr1Ptr <- FortranIO (Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
wr2Ptr <- FortranIO (Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
wiPtr <- FortranIO (Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Double, Double, Double, Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Double, Double, Double, Double) IO ())
-> IO () -> ContT (Double, Double, Double, Double, Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.lag2 Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
safminPtr Ptr Double
scale1Ptr Ptr Double
scale2Ptr Ptr Double
wr1Ptr Ptr Double
wr2Ptr Ptr Double
wiPtr
      IO (Double, Double, Double, Double, Double)
-> ContT
     (Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double, Double, Double, Double)
 -> ContT
      (Double, Double, Double, Double, Double)
      IO
      (Double, Double, Double, Double, Double))
-> IO (Double, Double, Double, Double, Double)
-> ContT
     (Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ (Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> (Double, Double, Double, Double, Double))
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double))
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
scale1Ptr
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double -> Double -> (Double, Double, Double, Double, Double))
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
scale2Ptr
         IO
  (Double
   -> Double -> Double -> (Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double -> Double -> (Double, Double, Double, Double, Double))
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
wr1Ptr
         IO (Double -> Double -> (Double, Double, Double, Double, Double))
-> IO Double
-> IO (Double -> (Double, Double, Double, Double, Double))
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
wr2Ptr
         IO (Double -> (Double, Double, Double, Double, Double))
-> IO Double -> IO (Double, Double, Double, Double, Double)
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
wiPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlag2s.f>
lag2s ::
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ ldsa -} ->
   IO (Array (ZeroInt,ZeroInt) Float, Int)
lag2s :: Int
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
lag2s Int
m Array (ZeroInt, ZeroInt) 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) 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) Float
sa <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldsa
   ContT
  (Array (ZeroInt, ZeroInt) Float, Int)
  IO
  (Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Float, Int)
   IO
   (Array (ZeroInt, ZeroInt) Float, Int)
 -> IO (Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (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) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
saPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
sa
      Ptr CInt
ldsaPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldsa
      Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lag2s Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Float
saPtr Ptr CInt
ldsaPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Float, Int)
      IO
      (Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
 -> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Float
      -> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) Float
   -> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
sa
         IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlags2.f>
lags2 ::
   Bool {- ^ upper -} ->
   Double {- ^ a1 -} ->
   Double {- ^ a2 -} ->
   Double {- ^ a3 -} ->
   Double {- ^ b1 -} ->
   Double {- ^ b2 -} ->
   Double {- ^ b3 -} ->
   IO (Double, Double, Double, Double, Double, Double)
lags2 :: Bool
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> IO (Double, Double, Double, Double, Double, Double)
lags2 Bool
upper Double
a1 Double
a2 Double
a3 Double
b1 Double
b2 Double
b3 = do
   ContT
  (Double, Double, Double, Double, Double, Double)
  IO
  (Double, Double, Double, Double, Double, Double)
-> IO (Double, Double, Double, Double, Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Double, Double, Double, Double, Double, Double)
   IO
   (Double, Double, Double, Double, Double, Double)
 -> IO (Double, Double, Double, Double, Double, Double))
-> ContT
     (Double, Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double)
-> IO (Double, Double, Double, Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
upperPtr <- Bool
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
upper
      Ptr Double
a1Ptr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
a1
      Ptr Double
a2Ptr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
a2
      Ptr Double
a3Ptr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
a3
      Ptr Double
b1Ptr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
b1
      Ptr Double
b2Ptr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
b2
      Ptr Double
b3Ptr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
b3
      Ptr Double
csuPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
snuPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
csvPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
snvPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
csqPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
snqPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Double, Double, Double, Double, Double, Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Double, Double, Double, Double, Double, Double) IO ())
-> IO ()
-> ContT (Double, Double, Double, Double, Double, Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.lags2 Ptr Bool
upperPtr Ptr Double
a1Ptr Ptr Double
a2Ptr Ptr Double
a3Ptr Ptr Double
b1Ptr Ptr Double
b2Ptr Ptr Double
b3Ptr Ptr Double
csuPtr Ptr Double
snuPtr Ptr Double
csvPtr Ptr Double
snvPtr Ptr Double
csqPtr Ptr Double
snqPtr
      IO (Double, Double, Double, Double, Double, Double)
-> ContT
     (Double, Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double, Double, Double, Double, Double)
 -> ContT
      (Double, Double, Double, Double, Double, Double)
      IO
      (Double, Double, Double, Double, Double, Double))
-> IO (Double, Double, Double, Double, Double, Double)
-> ContT
     (Double, Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ (Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> (Double, Double, Double, Double, Double, Double))
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
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
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
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
snuPtr
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
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
  (Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double -> (Double, Double, Double, Double, Double, Double))
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
snvPtr
         IO
  (Double
   -> Double -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO (Double -> (Double, Double, Double, Double, Double, Double))
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 (Double -> (Double, Double, Double, Double, Double, Double))
-> IO Double -> IO (Double, Double, Double, Double, Double, Double)
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
snqPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlagtf.f>
lagtf ::
   IOArray ZeroInt Double {- ^ a -} ->
   Double {- ^ lambda -} ->
   IOArray ZeroInt Double {- ^ b -} ->
   IOArray ZeroInt Double {- ^ c -} ->
   Double {- ^ tol -} ->
   IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
lagtf :: IOArray ZeroInt Double
-> Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Double
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
lagtf IOArray ZeroInt Double
a Double
lambda IOArray ZeroInt Double
b IOArray ZeroInt Double
c Double
tol = do
   let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
a
   let bDim0 :: Int
bDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
c
   let n :: Int
n = Int
aDim0
   String -> Bool -> IO ()
Call.assert String
"lagtf: n-1 == bDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   String -> Bool -> IO ()
Call.assert String
"lagtf: n-1 == cDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
   IOArray ZeroInt Double
d <- 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
2)
   IOArray ZeroInt CInt
in_ <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Double, Array ZeroInt CInt, Int)
  IO
  (Array ZeroInt Double, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array ZeroInt CInt, Int)
   IO
   (Array ZeroInt Double, Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt Double, Array ZeroInt CInt, Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt 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
a
      Ptr Double
lambdaPtr <- Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
lambda
      Ptr Double
bPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt 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
b
      Ptr Double
cPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt 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
c
      Ptr Double
tolPtr <- Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt CInt, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
tol
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt 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 CInt
in_Ptr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt 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
in_
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Double, Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Double, Array ZeroInt CInt, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt 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 Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lagtf Ptr CInt
nPtr Ptr Double
aPtr Ptr Double
lambdaPtr Ptr Double
bPtr Ptr Double
cPtr Ptr Double
tolPtr Ptr Double
dPtr Ptr CInt
in_Ptr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt CInt, Int)
      IO
      (Array ZeroInt Double, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt CInt, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array ZeroInt CInt
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt CInt, Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt CInt
      -> Int -> (Array ZeroInt Double, Array ZeroInt CInt, Int))
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 CInt
   -> Int -> (Array ZeroInt Double, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO (Int -> (Array ZeroInt Double, Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
in_
         IO (Int -> (Array ZeroInt Double, Array ZeroInt CInt, Int))
-> IO Int -> IO (Array ZeroInt Double, Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlagtm.f>
lagtm ::
   Char {- ^ trans -} ->
   Double {- ^ alpha -} ->
   Array ZeroInt Double {- ^ dl -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ du -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ x -} ->
   Double {- ^ beta -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO ()
lagtm :: Char
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) Double
-> Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO ()
lagtm Char
trans Double
alpha Array ZeroInt Double
dl Array ZeroInt Double
d Array ZeroInt Double
du Array (ZeroInt, ZeroInt) Double
x Double
beta IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
dlPtr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
dl
      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 Double
duPtr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
du
      Ptr Double
xPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      IO () -> ContT () IO ()
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 Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lagtm Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
alphaPtr Ptr Double
dlPtr Ptr Double
dPtr Ptr Double
duPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
betaPtr Ptr Double
bPtr Ptr CInt
ldbPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlagts.f>
lagts ::
   Int {- ^ job -} ->
   Array ZeroInt Double {- ^ a -} ->
   Array ZeroInt Double {- ^ b -} ->
   Array ZeroInt Double {- ^ c -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt CInt {- ^ in_ -} ->
   IOArray ZeroInt Double {- ^ y -} ->
   Double {- ^ tol -} ->
   IO (Double, Int)
lagts :: Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> IOArray ZeroInt Double
-> Double
-> IO (Double, Int)
lagts Int
job Array ZeroInt Double
a Array ZeroInt Double
b Array ZeroInt Double
c Array ZeroInt Double
d Array ZeroInt CInt
in_ IOArray ZeroInt Double
y Double
tol = do
   let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
a
   let bDim0 :: Int
bDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
d
   let in_Dim0 :: Int
in_Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
in_
   let yDim0 :: Int
yDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
y
   let n :: Int
n = Int
aDim0
   String -> Bool -> IO ()
Call.assert String
"lagts: n-1 == bDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   String -> Bool -> IO ()
Call.assert String
"lagts: n-1 == cDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
   String -> Bool -> IO ()
Call.assert String
"lagts: n-2 == dDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
   String -> Bool -> IO ()
Call.assert String
"lagts: n == in_Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
in_Dim0)
   String -> Bool -> IO ()
Call.assert String
"lagts: n == yDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
yDim0)
   ContT (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
jobPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
job
      Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- 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
a
      Ptr Double
bPtr <- 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
b
      Ptr Double
cPtr <- 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
c
      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 CInt
in_Ptr <- 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
in_
      Ptr Double
yPtr <- 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
y
      Ptr Double
tolPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
tol
      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 (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 CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lagts Ptr CInt
jobPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr Double
bPtr Ptr Double
cPtr Ptr Double
dPtr Ptr CInt
in_Ptr Ptr Double
yPtr Ptr Double
tolPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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
tolPtr
         IO (Int -> (Double, Int)) -> IO Int -> IO (Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlagv2.f>
lagv2 ::
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Double, Double, Double, Double)
lagv2 :: IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
lagv2 IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
b
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"lagv2: 2 == aDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
   String -> Bool -> IO ()
Call.assert String
"lagv2: 2 == bDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt Double
alphar <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
   IOArray ZeroInt Double
alphai <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
   IOArray ZeroInt Double
beta <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
   ContT
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Double, Double, Double, Double)
  IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Double, Double, Double, Double)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Double, Double, Double, Double)
   IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Double, Double, Double, Double)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Double, Double, Double, Double))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
alpharPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
alphar
      Ptr Double
alphaiPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
alphai
      Ptr Double
betaPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
beta
      Ptr Double
cslPtr <- FortranIO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Double, Double, Double, Double)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
snlPtr <- FortranIO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Double, Double, Double, Double)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
csrPtr <- FortranIO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Double, Double, Double, Double)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
snrPtr <- FortranIO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Double, Double, Double, Double)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Double, Double, Double, Double)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.lagv2 Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
alpharPtr Ptr Double
alphaiPtr Ptr Double
betaPtr Ptr Double
cslPtr Ptr Double
snlPtr Ptr Double
csrPtr Ptr Double
snrPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Double, Double, Double, Double)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Double, Double, Double, Double)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Double, Double, Double, Double)
      IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Double, Double, Double, Double))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> (Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt Double, Double, Double, Double, Double))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Double, Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Double, Double, Double, Double))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Double, Double))
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
alphar
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Double, Double, Double, Double))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Double, Double))
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
alphai
         IO
  (Array ZeroInt Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Double, Double, Double, Double))
-> IO (Array ZeroInt Double)
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Double, Double))
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
  (Double
   -> Double
   -> Double
   -> Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Double, Double))
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
cslPtr
         IO
  (Double
   -> Double
   -> Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Double, Double))
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
snlPtr
         IO
  (Double
   -> Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Double, Double, Double, Double))
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
csrPtr
         IO
  (Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Double, Double, Double, Double)
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
snrPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlahqr.f>
lahqr ::
   Bool {- ^ wantt -} ->
   Bool {- ^ wantz -} ->
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->
   Int {- ^ iloz -} ->
   Int {- ^ ihiz -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
lahqr :: Bool
-> Bool
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
lahqr Bool
wantt Bool
wantz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) Double
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
wr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
wi <- 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 Bool
wanttPtr <- Bool
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
      Ptr Bool
wantzPtr <- Bool
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      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
iloPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr Double
hPtr <- IOArray (ZeroInt, 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, ZeroInt) Double
h
      Ptr CInt
ldhPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr Double
wrPtr <- 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
wr
      Ptr Double
wiPtr <- 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
wi
      Ptr CInt
ilozPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
      Ptr CInt
ihizPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
      Ptr Double
zPtr <- IOArray (ZeroInt, 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, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      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 (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 Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lahqr Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
hPtr Ptr CInt
ldhPtr Ptr Double
wrPtr Ptr Double
wiPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr Double
zPtr Ptr CInt
ldzPtr 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 (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 (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 (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
wr
         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 (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
wi
         IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlahr2.f>
lahr2 ::
   Int {- ^ n -} ->
   Int {- ^ k -} ->
   Int {- ^ nb -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ ldt -} ->
   Int {- ^ ldy -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double)
lahr2 :: Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
lahr2 Int
n Int
k Int
nb IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
   IOArray (ZeroInt, ZeroInt) Double
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldt
   IOArray (ZeroInt, ZeroInt) Double
y <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldy
   ContT
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double)
 -> IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr CInt
nbPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
tau
      Ptr Double
tPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
t
      Ptr CInt
ldtPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr Double
yPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
y
      Ptr CInt
ldyPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldy
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lahr2 Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
nbPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
tPtr Ptr CInt
ldtPtr Ptr Double
yPtr Ptr CInt
ldyPtr
      IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
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
tau
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
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
t
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
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
y

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaic1.f>
laic1 ::
   Int {- ^ job -} ->
   Array ZeroInt Double {- ^ x -} ->
   Double {- ^ sest -} ->
   Array ZeroInt Double {- ^ w -} ->
   Double {- ^ gamma -} ->
   IO (Double, Double, Double)
laic1 :: Int
-> Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Double
-> IO (Double, Double, Double)
laic1 Int
job Array ZeroInt Double
x Double
sest Array ZeroInt Double
w 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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, Double, Double) IO (Double, Double, Double)
-> IO (Double, Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Double, Double) IO (Double, Double, Double)
 -> IO (Double, Double, Double))
-> ContT (Double, Double, Double) IO (Double, Double, Double)
-> IO (Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
jobPtr <- Int -> FortranIO (Double, Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
job
      Ptr CInt
jPtr <- Int -> FortranIO (Double, Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
j
      Ptr Double
xPtr <- Array ZeroInt Double
-> FortranIO (Double, Double, Double) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
x
      Ptr Double
sestPtr <- Double -> FortranIO (Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
sest
      Ptr Double
wPtr <- Array ZeroInt Double
-> FortranIO (Double, Double, Double) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
w
      Ptr Double
gammaPtr <- Double -> FortranIO (Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
gamma
      Ptr Double
sestprPtr <- FortranIO (Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
sPtr <- FortranIO (Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
cPtr <- FortranIO (Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Double, Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Double, Double) IO ())
-> IO () -> ContT (Double, Double, Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.laic1 Ptr CInt
jobPtr Ptr CInt
jPtr Ptr Double
xPtr Ptr Double
sestPtr Ptr Double
wPtr Ptr Double
gammaPtr Ptr Double
sestprPtr Ptr Double
sPtr Ptr Double
cPtr
      IO (Double, Double, Double)
-> ContT (Double, Double, Double) IO (Double, Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double, Double)
 -> ContT (Double, Double, Double) IO (Double, Double, Double))
-> IO (Double, Double, Double)
-> ContT (Double, Double, Double) IO (Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ (Double -> Double -> Double -> (Double, Double, Double))
-> IO (Double -> Double -> Double -> (Double, Double, Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO (Double -> Double -> Double -> (Double, Double, Double))
-> IO Double -> IO (Double -> Double -> (Double, Double, Double))
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 (Double -> Double -> (Double, Double, Double))
-> IO Double -> IO (Double -> (Double, Double, Double))
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 -> (Double, Double, Double))
-> IO Double -> IO (Double, Double, Double)
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
cPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaisnan.f>
laisnan ::
   Double {- ^ din1 -} ->
   Double {- ^ din2 -} ->
   IO Bool
laisnan :: Double -> Double -> IO Bool
laisnan Double
din1 Double
din2 = do
   ContT Bool IO Bool -> IO Bool
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Bool IO Bool -> IO Bool) -> ContT Bool IO Bool -> IO Bool
forall a b. (a -> b) -> a -> b
$ do
      Ptr Double
din1Ptr <- Double -> FortranIO Bool (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
din1
      Ptr Double
din2Ptr <- Double -> FortranIO Bool (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
din2
      IO Bool -> ContT Bool IO Bool
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> ContT Bool IO Bool) -> IO Bool -> ContT Bool IO Bool
forall a b. (a -> b) -> a -> b
$ Ptr Double -> Ptr Double -> IO Bool
FFI.laisnan Ptr Double
din1Ptr Ptr Double
din2Ptr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaln2.f>
laln2 ::
   Bool {- ^ ltrans -} ->
   Double {- ^ smin -} ->
   Double {- ^ ca -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Double {- ^ d1 -} ->
   Double {- ^ d2 -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Double {- ^ wr -} ->
   Double {- ^ wi -} ->
   Int {- ^ ldx -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Double, Double, Int)
laln2 :: Bool
-> Double
-> Double
-> Array (ZeroInt, ZeroInt) Double
-> Double
-> Double
-> Array (ZeroInt, ZeroInt) Double
-> Double
-> Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
laln2 Bool
ltrans Double
smin Double
ca Array (ZeroInt, ZeroInt) Double
a Double
d1 Double
d2 Array (ZeroInt, ZeroInt) Double
b Double
wr Double
wi Int
ldx = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
b
   let na :: Int
na = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nw :: Int
nw = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   IOArray (ZeroInt, ZeroInt) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldx
   ContT
  (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
 -> IO (Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
ltransPtr <- Bool
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
ltrans
      Ptr CInt
naPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
na
      Ptr CInt
nwPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nw
      Ptr Double
sminPtr <- Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
smin
      Ptr Double
caPtr <- Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
ca
      Ptr Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (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) Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
d1Ptr <- Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
d1
      Ptr Double
d2Ptr <- Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
d2
      Ptr Double
bPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (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) Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
wrPtr <- Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
wr
      Ptr Double
wiPtr <- Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
wi
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Double
scalePtr <- FortranIO
  (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
xnormPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) IO ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.laln2 Ptr Bool
ltransPtr Ptr CInt
naPtr Ptr CInt
nwPtr Ptr Double
sminPtr Ptr Double
caPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
d1Ptr Ptr Double
d2Ptr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
wrPtr Ptr Double
wiPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
scalePtr Ptr Double
xnormPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Double
 -> Double
 -> Int
 -> (Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Double
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Double
      -> Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
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
x
         IO
  (Double
   -> Double
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO Double
-> IO
     (Double
      -> Int -> (Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
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 -> (Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO Double
-> IO
     (Int -> (Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
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
xnormPtr
         IO (Int -> (Array (ZeroInt, ZeroInt) Double, Double, Double, Int))
-> IO Int
-> IO (Array (ZeroInt, ZeroInt) Double, Double, Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlals0.f>
lals0 ::
   Int {- ^ icompq -} ->
   Int {- ^ nl -} ->
   Int {- ^ nr -} ->
   Int {- ^ sqre -} ->
   IOArray (ZeroInt,ZeroInt) 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 -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Int)
lals0 :: Int
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) 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
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
lals0 Int
icompq Int
nl Int
nr Int
sqre IOArray (ZeroInt, ZeroInt) 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 = 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
bx <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldbx
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
k
   ContT
  (Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
icompqPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
      Ptr CInt
nlPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nl
      Ptr CInt
nrPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nr
      Ptr CInt
sqrePtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
      Ptr CInt
nrhsPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
bxPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
bx
      Ptr CInt
ldbxPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr Double
cPtr <- Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
c
      Ptr Double
sPtr <- Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
s
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
      Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr 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 Double
bPtr Ptr CInt
ldbPtr Ptr 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
workPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (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
bx
         IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlalsa.f>
lalsa ::
   Int {- ^ icompq -} ->
   IOArray (ZeroInt,ZeroInt) 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 -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Int)
lalsa :: Int
-> IOArray (ZeroInt, ZeroInt) 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
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
lalsa Int
icompq IOArray (ZeroInt, ZeroInt) 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 = 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
bx <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldbx
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
icompqPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
      Ptr CInt
smlsizPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
smlsiz
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
bxPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
bx
      Ptr CInt
ldbxPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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
workPtr <- IOArray ZeroInt Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (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
iwork
      Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr 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 Double
bPtr Ptr CInt
ldbPtr Ptr 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
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (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
bx
         IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlalsd.f>
lalsd ::
   Char {- ^ uplo -} ->
   Int {- ^ smlsiz -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Double {- ^ rcond -} ->
   Int {- ^ workSize -} ->
   Int {- ^ iworkSize -} ->
   IO (Int, Int)
lalsd :: Char
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Double
-> Int
-> Int
-> IO (Int, Int)
lalsd Char
uplo Int
smlsiz IOArray ZeroInt Double
d IOArray ZeroInt Double
e IOArray (ZeroInt, ZeroInt) Double
b Double
rcond Int
workSize Int
iworkSize = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
iworkSize
   ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int) IO (Int, Int) -> IO (Int, Int))
-> ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
smlsizPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
smlsiz
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr 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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Int) IO ()
forall (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> 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 Double
bPtr Ptr CInt
ldbPtr Ptr Double
rcondPtr Ptr CInt
rankPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Int -> Int -> (Int, Int)) -> IO Int -> IO (Int -> (Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlamrg.f>
lamrg ::
   Int {- ^ n1 -} ->
   Int {- ^ n2 -} ->
   Array ZeroInt Double {- ^ a -} ->
   Int {- ^ dtrd1 -} ->
   Int {- ^ dtrd2 -} ->
   IO (Array ZeroInt CInt)
lamrg :: Int
-> Int
-> Array ZeroInt Double
-> Int
-> Int
-> IO (Array ZeroInt CInt)
lamrg Int
n1 Int
n2 Array ZeroInt Double
a Int
dtrd1 Int
dtrd2 = 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
a
   String -> Bool -> IO ()
Call.assert String
"lamrg: n1+n2 == aDim0" (Int
n1Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
n2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
   IOArray ZeroInt CInt
index <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
n1Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
n2)
   ContT (Array ZeroInt CInt) IO (Array ZeroInt CInt)
-> IO (Array ZeroInt CInt)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt) IO (Array ZeroInt CInt)
 -> IO (Array ZeroInt CInt))
-> ContT (Array ZeroInt CInt) IO (Array ZeroInt CInt)
-> IO (Array ZeroInt CInt)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
n1Ptr <- Int -> FortranIO (Array ZeroInt CInt) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n1
      Ptr CInt
n2Ptr <- Int -> FortranIO (Array ZeroInt CInt) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n2
      Ptr Double
aPtr <- Array ZeroInt Double -> FortranIO (Array ZeroInt CInt) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
a
      Ptr CInt
dtrd1Ptr <- Int -> FortranIO (Array ZeroInt CInt) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
dtrd1
      Ptr CInt
dtrd2Ptr <- Int -> FortranIO (Array ZeroInt CInt) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
dtrd2
      Ptr CInt
indexPtr <- IOArray ZeroInt CInt -> FortranIO (Array ZeroInt CInt) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
index
      IO () -> ContT (Array ZeroInt CInt) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt) IO ())
-> IO () -> ContT (Array ZeroInt CInt) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lamrg Ptr CInt
n1Ptr Ptr CInt
n2Ptr Ptr Double
aPtr Ptr CInt
dtrd1Ptr Ptr CInt
dtrd2Ptr Ptr CInt
indexPtr
      IO (Array ZeroInt CInt)
-> ContT (Array ZeroInt CInt) IO (Array ZeroInt CInt)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt)
 -> ContT (Array ZeroInt CInt) IO (Array ZeroInt CInt))
-> IO (Array ZeroInt CInt)
-> ContT (Array ZeroInt CInt) IO (Array ZeroInt CInt)
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
index

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaneg.f>
laneg ::
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ lld -} ->
   Double {- ^ sigma -} ->
   Double {- ^ pivmin -} ->
   Int {- ^ r -} ->
   IO CInt
laneg :: Array ZeroInt Double
-> Array ZeroInt Double -> Double -> Double -> Int -> IO CInt
laneg Array ZeroInt Double
d Array ZeroInt Double
lld Double
sigma Double
pivmin Int
r = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
d
   let lldDim0 :: Int
lldDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
lld
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"laneg: n-1 == lldDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
lldDim0)
   ContT CInt IO CInt -> IO CInt
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT CInt IO CInt -> IO CInt) -> ContT CInt IO CInt -> IO CInt
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
dPtr <- Array ZeroInt Double -> FortranIO CInt (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
d
      Ptr Double
lldPtr <- Array ZeroInt Double -> FortranIO CInt (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
lld
      Ptr Double
sigmaPtr <- Double -> FortranIO CInt (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
sigma
      Ptr Double
pivminPtr <- Double -> FortranIO CInt (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
pivmin
      Ptr CInt
rPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
r
      IO CInt -> ContT CInt IO CInt
forall (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 Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO CInt
FFI.laneg Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
lldPtr Ptr Double
sigmaPtr Ptr Double
pivminPtr Ptr CInt
rPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlangb.f>
langb ::
   Char {- ^ norm -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Int {- ^ lwork -} ->
   IO Double
langb :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO Double
langb Char
norm Int
kl Int
ku Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 (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 Double
abPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> IO Double
FFI.langb Ptr CChar
normPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlange.f>
lange ::
   Char {- ^ norm -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO Double
lange :: Char -> Int -> Array (ZeroInt, ZeroInt) Double -> Int -> IO Double
lange Char
norm Int
m Array (ZeroInt, ZeroInt) 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) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO 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 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> IO Double
FFI.lange Ptr CChar
normPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlangt.f>
langt ::
   Char {- ^ norm -} ->
   Array ZeroInt Double {- ^ dl -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ du -} ->
   IO Double
langt :: Char
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> IO Double
langt Char
norm Array ZeroInt Double
dl Array ZeroInt Double
d Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double
dlPtr <- 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
dl
      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 Double
duPtr <- 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
du
      IO Double -> ContT Double IO Double
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 Double -> Ptr Double -> IO Double
FFI.langt Ptr CChar
normPtr Ptr CInt
nPtr Ptr Double
dlPtr Ptr Double
dPtr Ptr Double
duPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlanhs.f>
lanhs ::
   Char {- ^ norm -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO Double
lanhs :: Char -> Array (ZeroInt, ZeroInt) Double -> Int -> IO Double
lanhs Char
norm Array (ZeroInt, ZeroInt) 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) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO 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 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 (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 CInt -> Ptr Double -> IO Double
FFI.lanhs Ptr CChar
normPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlansb.f>
lansb ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Int {- ^ k -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Int {- ^ lwork -} ->
   IO Double
lansb :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO Double
lansb Char
norm Char
uplo Int
k Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 (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 Double
abPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> IO Double
FFI.lansb Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlansf.f>
lansf ::
   Char {- ^ norm -} ->
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO Double
lansf :: Char
-> Char -> Char -> Int -> Array ZeroInt Double -> Int -> IO Double
lansf Char
norm Char
transr Char
uplo Int
n Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
a
   String -> Bool -> IO ()
Call.assert String
"lansf: n*(n+1)`div`2 == aDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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
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 Double
aPtr <- 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
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 (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 Double
-> Ptr Double
-> IO Double
FFI.lansf Ptr CChar
normPtr Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr Double
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlansp.f>
lansp ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ ap -} ->
   Int {- ^ lwork -} ->
   IO Double
lansp :: Char -> Char -> Int -> Array ZeroInt Double -> Int -> IO Double
lansp Char
norm Char
uplo Int
n Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 (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 Double
apPtr <- 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
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 (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 Double -> Ptr Double -> IO Double
FFI.lansp Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlanst.f>
lanst ::
   Char {- ^ norm -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ e -} ->
   IO Double
lanst :: Char -> Array ZeroInt Double -> Array ZeroInt Double -> IO Double
lanst Char
norm Array ZeroInt Double
d Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
e
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"lanst: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   ContT 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 Double
ePtr <- 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
e
      IO Double -> ContT Double IO Double
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 Double -> IO Double
FFI.lanst Ptr CChar
normPtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlansy.f>
lansy ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO Double
lansy :: Char -> Char -> Array (ZeroInt, ZeroInt) Double -> Int -> IO Double
lansy Char
norm Char
uplo Array (ZeroInt, ZeroInt) 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) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO 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 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> IO Double
FFI.lansy Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlantb.f>
lantb ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Int {- ^ k -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Int {- ^ lwork -} ->
   IO Double
lantb :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO Double
lantb Char
norm Char
uplo Char
diag Int
k Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 (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 Double
abPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Double (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 (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 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 Double
abPtr Ptr CInt
ldabPtr Ptr Double
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlantp.f>
lantp ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ ap -} ->
   Int {- ^ lwork -} ->
   IO Double
lantp :: Char
-> Char -> Char -> Int -> Array ZeroInt Double -> Int -> IO Double
lantp Char
norm Char
uplo Char
diag Int
n Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 (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 Double
apPtr <- 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
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 (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 Double
-> Ptr Double
-> IO Double
FFI.lantp Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlantr.f>
lantr ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO Double
lantr :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO Double
lantr Char
norm Char
uplo Char
diag Int
m Array (ZeroInt, ZeroInt) 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) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO 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 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 (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 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 Double
aPtr Ptr CInt
ldaPtr Ptr Double
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlanv2.f>
lanv2 ::
   Double {- ^ a -} ->
   Double {- ^ b -} ->
   Double {- ^ c -} ->
   Double {- ^ d -} ->
   IO (Double, Double, Double, Double, Double, Double, Double, Double, Double, Double)
lanv2 :: Double
-> Double
-> Double
-> Double
-> IO
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
lanv2 Double
a Double
b Double
c Double
d = do
   ContT
  (Double, Double, Double, Double, Double, Double, Double, Double,
   Double, Double)
  IO
  (Double, Double, Double, Double, Double, Double, Double, Double,
   Double, Double)
-> IO
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Double, Double, Double, Double, Double, Double, Double, Double,
    Double, Double)
   IO
   (Double, Double, Double, Double, Double, Double, Double, Double,
    Double, Double)
 -> IO
      (Double, Double, Double, Double, Double, Double, Double, Double,
       Double, Double))
-> ContT
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
-> IO
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Double
aPtr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
a
      Ptr Double
bPtr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
b
      Ptr Double
cPtr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
c
      Ptr Double
dPtr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
d
      Ptr Double
rt1rPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double, Double, Double,
   Double, Double)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
rt1iPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double, Double, Double,
   Double, Double)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
rt2rPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double, Double, Double,
   Double, Double)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
rt2iPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double, Double, Double,
   Double, Double)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
csPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double, Double, Double,
   Double, Double)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
snPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double, Double, Double,
   Double, Double)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Double, Double, Double, Double, Double, Double, Double, Double,
       Double, Double)
      IO
      ())
-> IO ()
-> ContT
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.lanv2 Ptr Double
aPtr Ptr Double
bPtr Ptr Double
cPtr Ptr Double
dPtr Ptr Double
rt1rPtr Ptr Double
rt1iPtr Ptr Double
rt2rPtr Ptr Double
rt2iPtr Ptr Double
csPtr Ptr Double
snPtr
      IO
  (Double, Double, Double, Double, Double, Double, Double, Double,
   Double, Double)
-> ContT
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Double, Double, Double, Double, Double, Double, Double, Double,
    Double, Double)
 -> ContT
      (Double, Double, Double, Double, Double, Double, Double, Double,
       Double, Double)
      IO
      (Double, Double, Double, Double, Double, Double, Double, Double,
       Double, Double))
-> IO
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
-> ContT
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
forall a b. (a -> b) -> a -> b
$ (Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> (Double, Double, Double, Double, Double, Double, Double, Double,
     Double, Double))
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double, Double, Double,
          Double, Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,)
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double, Double, Double,
       Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double, Double, Double,
          Double, Double))
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
aPtr
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double, Double, Double,
       Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double, Double, Double,
          Double, Double))
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
bPtr
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double, Double, Double,
       Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double, Double, Double,
          Double, Double))
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
cPtr
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double, Double, Double,
       Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double, Double, Double,
          Double, Double))
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
dPtr
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double, Double, Double,
       Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double, Double, Double,
          Double, Double))
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
rt1rPtr
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double, Double, Double,
       Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double, Double, Double,
          Double, Double))
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
rt1iPtr
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double, Double, Double,
       Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double, Double, Double,
          Double, Double))
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
rt2rPtr
         IO
  (Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double, Double, Double,
       Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double, Double, Double,
          Double, Double))
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
rt2iPtr
         IO
  (Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double, Double, Double,
       Double, Double))
-> IO Double
-> IO
     (Double
      -> (Double, Double, Double, Double, Double, Double, Double, Double,
          Double, Double))
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
  (Double
   -> (Double, Double, Double, Double, Double, Double, Double, Double,
       Double, Double))
-> IO Double
-> IO
     (Double, Double, Double, Double, Double, Double, Double, Double,
      Double, Double)
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
snPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapll.f>
lapll ::
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ x -} ->
   Int {- ^ incx -} ->
   IOArray ZeroInt Double {- ^ y -} ->
   Int {- ^ incy -} ->
   IO (Double)
lapll :: Int
-> IOArray ZeroInt Double
-> Int
-> IOArray ZeroInt Double
-> Int
-> IO Double
lapll Int
n IOArray ZeroInt Double
x Int
incx IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
y
   let _xSize :: Int
_xSize = Int
xDim0
   let _ySize :: Int
_ySize = 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 Double
xPtr <- 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
x
      Ptr CInt
incxPtr <- Int -> FortranIO Double (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr Double
yPtr <- 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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> IO ()
FFI.lapll Ptr CInt
nPtr Ptr Double
xPtr Ptr CInt
incxPtr Ptr Double
yPtr Ptr CInt
incyPtr Ptr Double
ssminPtr
      IO Double -> ContT Double IO Double
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

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapmr.f>
lapmr ::
   Bool {- ^ forwrd -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->
   IOArray ZeroInt CInt {- ^ k -} ->
   IO ()
lapmr :: Bool
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt CInt
-> IO ()
lapmr Bool
forwrd IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lapmr Ptr Bool
forwrdPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr CInt
kPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapmt.f>
lapmt ::
   Bool {- ^ forwrd -} ->
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->
   IOArray ZeroInt CInt {- ^ k -} ->
   IO ()
lapmt :: Bool
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt CInt
-> IO ()
lapmt Bool
forwrd Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lapmt Ptr Bool
forwrdPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr CInt
kPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapy2.f>
lapy2 ::
   Double {- ^ x -} ->
   Double {- ^ y -} ->
   IO Double
lapy2 :: Double -> Double -> IO Double
lapy2 Double
x Double
y = do
   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 Double
xPtr <- Double -> FortranIO Double (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
x
      Ptr Double
yPtr <- Double -> FortranIO Double (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
y
      IO Double -> ContT Double IO Double
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 -> Ptr Double -> IO Double
FFI.lapy2 Ptr Double
xPtr Ptr Double
yPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlapy3.f>
lapy3 ::
   Double {- ^ x -} ->
   Double {- ^ y -} ->
   Double {- ^ z -} ->
   IO Double
lapy3 :: Double -> Double -> Double -> IO Double
lapy3 Double
x Double
y Double
z = do
   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 Double
xPtr <- Double -> FortranIO Double (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
x
      Ptr Double
yPtr <- Double -> FortranIO Double (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
y
      Ptr Double
zPtr <- Double -> FortranIO Double (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
z
      IO Double -> ContT Double IO Double
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 -> Ptr Double -> Ptr Double -> IO Double
FFI.lapy3 Ptr Double
xPtr Ptr Double
yPtr Ptr Double
zPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqgb.f>
laqgb ::
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Array ZeroInt Double {- ^ r -} ->
   Array ZeroInt Double {- ^ c -} ->
   Double {- ^ rowcnd -} ->
   Double {- ^ colcnd -} ->
   Double {- ^ amax -} ->
   IO (Char)
laqgb :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> IO Char
laqgb Int
kl Int
ku IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Char (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 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 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 (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 (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)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqge.f>
laqge ::
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ r -} ->
   Array ZeroInt Double {- ^ c -} ->
   Double {- ^ rowcnd -} ->
   Double {- ^ colcnd -} ->
   Double {- ^ amax -} ->
   IO (Char)
laqge :: IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> IO Char
laqge IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Char (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 (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 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 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 (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 (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)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqp2.f>
laqp2 ::
   Int {- ^ m -} ->
   Int {- ^ offset -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray ZeroInt CInt {- ^ jpvt -} ->
   IOArray ZeroInt Double {- ^ vn1 -} ->
   IOArray ZeroInt Double {- ^ vn2 -} ->
   IO (Array ZeroInt Double)
laqp2 :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt CInt
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IO (Array ZeroInt Double)
laqp2 Int
m Int
offset IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
offsetPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
offset
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
jpvtPtr <- IOArray ZeroInt CInt -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpvt
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
vn1Ptr <- 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
vn1
      Ptr Double
vn2Ptr <- 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
vn2
      Ptr Double
workPtr <- 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
work
      IO () -> ContT (Array ZeroInt Double) IO ()
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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.laqp2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
offsetPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
jpvtPtr Ptr Double
tauPtr Ptr Double
vn1Ptr Ptr Double
vn2Ptr Ptr Double
workPtr
      IO (Array ZeroInt Double)
-> ContT (Array ZeroInt Double) IO (Array ZeroInt Double)
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
tau

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqps.f>
laqps ::
   Int {- ^ m -} ->
   Int {- ^ offset -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray ZeroInt CInt {- ^ jpvt -} ->
   Int {- ^ kb -} ->
   IOArray ZeroInt Double {- ^ vn1 -} ->
   IOArray ZeroInt Double {- ^ vn2 -} ->
   IOArray ZeroInt Double {- ^ auxv -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ f -} ->
   IO (Int, Array ZeroInt Double)
laqps :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt CInt
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Int, Array ZeroInt Double)
laqps Int
m Int
offset IOArray (ZeroInt, ZeroInt) Double
a IOArray ZeroInt CInt
jpvt Int
kb IOArray ZeroInt Double
vn1 IOArray ZeroInt Double
vn2 IOArray ZeroInt Double
auxv IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kb
   ContT (Int, Array ZeroInt Double) IO (Int, Array ZeroInt Double)
-> IO (Int, Array ZeroInt Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Array ZeroInt Double) IO (Int, Array ZeroInt Double)
 -> IO (Int, Array ZeroInt Double))
-> ContT (Int, Array ZeroInt Double) IO (Int, Array ZeroInt Double)
-> IO (Int, Array ZeroInt Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Int, Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
offsetPtr <- Int -> FortranIO (Int, Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
offset
      Ptr CInt
nbPtr <- Int -> FortranIO (Int, Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
      Ptr CInt
kbPtr <- FortranIO (Int, Array ZeroInt Double) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Array ZeroInt Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
jpvtPtr <- IOArray ZeroInt CInt
-> FortranIO (Int, Array ZeroInt Double) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpvt
      Ptr Double
tauPtr <- IOArray ZeroInt Double
-> FortranIO (Int, Array ZeroInt Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
tau
      Ptr Double
vn1Ptr <- IOArray ZeroInt Double
-> FortranIO (Int, Array ZeroInt 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 Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
vn2
      Ptr Double
auxvPtr <- IOArray ZeroInt Double
-> FortranIO (Int, Array ZeroInt Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
auxv
      Ptr Double
fPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Array ZeroInt Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
f
      Ptr CInt
ldfPtr <- Int -> FortranIO (Int, Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldf
      IO () -> ContT (Int, Array ZeroInt Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Array ZeroInt Double) IO ())
-> IO () -> ContT (Int, Array ZeroInt Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.laqps Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
offsetPtr Ptr CInt
nbPtr Ptr CInt
kbPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
jpvtPtr Ptr Double
tauPtr Ptr Double
vn1Ptr Ptr Double
vn2Ptr Ptr Double
auxvPtr Ptr Double
fPtr Ptr CInt
ldfPtr
      IO (Int, Array ZeroInt Double)
-> ContT (Int, Array ZeroInt Double) IO (Int, Array ZeroInt Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Array ZeroInt Double)
 -> ContT
      (Int, Array ZeroInt Double) IO (Int, Array ZeroInt Double))
-> IO (Int, Array ZeroInt Double)
-> ContT (Int, Array ZeroInt Double) IO (Int, Array ZeroInt Double)
forall a b. (a -> b) -> a -> b
$ (Int -> Array ZeroInt Double -> (Int, Array ZeroInt Double))
-> IO (Int -> Array ZeroInt Double -> (Int, Array ZeroInt Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Int -> Array ZeroInt Double -> (Int, Array ZeroInt Double))
-> IO Int
-> IO (Array ZeroInt Double -> (Int, Array ZeroInt Double))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double -> (Int, Array ZeroInt Double))
-> IO (Array ZeroInt Double) -> IO (Int, Array ZeroInt Double)
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
tau

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqr0.f>
laqr0 ::
   Bool {- ^ wantt -} ->
   Bool {- ^ wantz -} ->
   Int {- ^ ilo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->
   Int {- ^ iloz -} ->
   Int {- ^ ihiz -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   Int {- ^ workSize -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
laqr0 :: Bool
-> Bool
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
laqr0 Bool
wantt Bool
wantz Int
ilo IOArray (ZeroInt, ZeroInt) Double
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
wr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
ihi
   IOArray ZeroInt Double
wi <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
ihi
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   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 Bool
wanttPtr <- Bool
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
      Ptr Bool
wantzPtr <- Bool
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      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
iloPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr Double
hPtr <- IOArray (ZeroInt, 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, ZeroInt) Double
h
      Ptr CInt
ldhPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr Double
wrPtr <- 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
wr
      Ptr Double
wiPtr <- 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
wi
      Ptr CInt
ilozPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
      Ptr CInt
ihizPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
      Ptr Double
zPtr <- IOArray (ZeroInt, 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, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt 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, 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 (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 Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laqr0 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
hPtr Ptr CInt
ldhPtr Ptr Double
wrPtr Ptr Double
wiPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
lworkPtr 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 (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 (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 (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
wr
         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 (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
wi
         IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqr1.f>
laqr1 ::
   Array (ZeroInt,ZeroInt) Double {- ^ h -} ->
   Double {- ^ sr1 -} ->
   Double {- ^ si1 -} ->
   Double {- ^ sr2 -} ->
   Double {- ^ si2 -} ->
   IO (Array ZeroInt Double)
laqr1 :: Array (ZeroInt, ZeroInt) Double
-> Double
-> Double
-> Double
-> Double
-> IO (Array ZeroInt Double)
laqr1 Array (ZeroInt, ZeroInt) Double
h Double
sr1 Double
si1 Double
sr2 Double
si2 = do
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
h
   let n :: Int
n = Int
hDim0
   let ldh :: Int
ldh = Int
hDim1
   IOArray ZeroInt Double
v <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   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 Double
hPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Array ZeroInt Double) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
h
      Ptr CInt
ldhPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr Double
sr1Ptr <- Double -> FortranIO (Array ZeroInt Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
sr1
      Ptr Double
si1Ptr <- Double -> FortranIO (Array ZeroInt Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
si1
      Ptr Double
sr2Ptr <- Double -> FortranIO (Array ZeroInt Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
sr2
      Ptr Double
si2Ptr <- Double -> FortranIO (Array ZeroInt Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
si2
      Ptr Double
vPtr <- 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
v
      IO () -> ContT (Array ZeroInt Double) IO ()
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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.laqr1 Ptr CInt
nPtr Ptr Double
hPtr Ptr CInt
ldhPtr Ptr Double
sr1Ptr Ptr Double
si1Ptr Ptr Double
sr2Ptr Ptr Double
si2Ptr Ptr Double
vPtr
      IO (Array ZeroInt Double)
-> ContT (Array ZeroInt Double) IO (Array ZeroInt Double)
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
v

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqr2.f>
laqr2 ::
   Bool {- ^ wantt -} ->
   Bool {- ^ wantz -} ->
   Int {- ^ ktop -} ->
   Int {- ^ kbot -} ->
   Int {- ^ nw -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->
   Int {- ^ iloz -} ->
   Int {- ^ ihiz -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   Int {- ^ ldv -} ->
   Int {- ^ nh -} ->
   Int {- ^ ldt -} ->
   Int {- ^ nv -} ->
   Int {- ^ ldwv -} ->
   Int {- ^ lwork -} ->
   IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double)
laqr2 :: Bool
-> Bool
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
laqr2 Bool
wantt Bool
wantz Int
ktop Int
kbot Int
nw IOArray (ZeroInt, ZeroInt) Double
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
sr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kbot
   IOArray ZeroInt Double
si <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kbot
   IOArray (ZeroInt, ZeroInt) Double
v <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldv
   IOArray (ZeroInt, ZeroInt) Double
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldt
   IOArray (ZeroInt, ZeroInt) Double
wv <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldwv
   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,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
  IO
  (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double)
   IO
   (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double)
 -> IO
      (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
wanttPtr <- Bool
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
      Ptr Bool
wantzPtr <- Bool
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
ktopPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ktop
      Ptr CInt
kbotPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kbot
      Ptr CInt
nwPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nw
      Ptr Double
hPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
h
      Ptr CInt
ldhPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr CInt
ilozPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
      Ptr CInt
ihizPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr CInt
nsPtr <- FortranIO
  (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
ndPtr <- FortranIO
  (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
srPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
sr
      Ptr Double
siPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
si
      Ptr Double
vPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
v
      Ptr CInt
ldvPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr CInt
nhPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nh
      Ptr Double
tPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
t
      Ptr CInt
ldtPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr CInt
nvPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nv
      Ptr Double
wvPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
wv
      Ptr CInt
ldwvPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwv
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (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, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      IO ()
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double)
      IO
      ())
-> IO ()
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr 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 Double
hPtr Ptr CInt
ldhPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr CInt
nsPtr Ptr CInt
ndPtr Ptr Double
srPtr Ptr Double
siPtr Ptr Double
vPtr Ptr CInt
ldvPtr Ptr CInt
nhPtr Ptr Double
tPtr Ptr CInt
ldtPtr Ptr CInt
nvPtr Ptr Double
wvPtr Ptr CInt
ldwvPtr Ptr Double
workPtr Ptr CInt
lworkPtr
      IO
  (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double)
 -> ContT
      (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double)
      IO
      (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Int
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
     Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double))
-> IO
     (Int
      -> Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
         IO
  (Int
   -> Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO Int
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
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
sr
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
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
si
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
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
v
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
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
t
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
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
wv

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqr3.f>
laqr3 ::
   Bool {- ^ wantt -} ->
   Bool {- ^ wantz -} ->
   Int {- ^ ktop -} ->
   Int {- ^ kbot -} ->
   Int {- ^ nw -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->
   Int {- ^ iloz -} ->
   Int {- ^ ihiz -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   Int {- ^ ldv -} ->
   Int {- ^ nh -} ->
   Int {- ^ ldt -} ->
   Int {- ^ nv -} ->
   Int {- ^ ldwv -} ->
   Int {- ^ lwork -} ->
   IO (Int, Int, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double)
laqr3 :: Bool
-> Bool
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
laqr3 Bool
wantt Bool
wantz Int
ktop Int
kbot Int
nw IOArray (ZeroInt, ZeroInt) Double
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
sr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kbot
   IOArray ZeroInt Double
si <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kbot
   IOArray (ZeroInt, ZeroInt) Double
v <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldv
   IOArray (ZeroInt, ZeroInt) Double
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldt
   IOArray (ZeroInt, ZeroInt) Double
wv <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldwv
   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,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
  IO
  (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double)
   IO
   (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double)
 -> IO
      (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
wanttPtr <- Bool
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
      Ptr Bool
wantzPtr <- Bool
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
ktopPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ktop
      Ptr CInt
kbotPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kbot
      Ptr CInt
nwPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nw
      Ptr Double
hPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
h
      Ptr CInt
ldhPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr CInt
ilozPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
      Ptr CInt
ihizPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr CInt
nsPtr <- FortranIO
  (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
ndPtr <- FortranIO
  (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
srPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
sr
      Ptr Double
siPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
si
      Ptr Double
vPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
v
      Ptr CInt
ldvPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr CInt
nhPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nh
      Ptr Double
tPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
t
      Ptr CInt
ldtPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr CInt
nvPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nv
      Ptr Double
wvPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
wv
      Ptr CInt
ldwvPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwv
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (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, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      IO ()
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double)
      IO
      ())
-> IO ()
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr 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 Double
hPtr Ptr CInt
ldhPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr CInt
nsPtr Ptr CInt
ndPtr Ptr Double
srPtr Ptr Double
siPtr Ptr Double
vPtr Ptr CInt
ldvPtr Ptr CInt
nhPtr Ptr Double
tPtr Ptr CInt
ldtPtr Ptr CInt
nvPtr Ptr Double
wvPtr Ptr CInt
ldwvPtr Ptr Double
workPtr Ptr CInt
lworkPtr
      IO
  (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double)
 -> ContT
      (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double)
      IO
      (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Int
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
     Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double))
-> IO
     (Int
      -> Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
         IO
  (Int
   -> Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO Int
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
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
sr
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
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
si
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
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
v
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
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
t
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double)
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
wv

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqr4.f>
laqr4 ::
   Bool {- ^ wantt -} ->
   Bool {- ^ wantz -} ->
   Int {- ^ ilo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->
   Int {- ^ iloz -} ->
   Int {- ^ ihiz -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   Int {- ^ workSize -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
laqr4 :: Bool
-> Bool
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
laqr4 Bool
wantt Bool
wantz Int
ilo IOArray (ZeroInt, ZeroInt) Double
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
wr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
ihi
   IOArray ZeroInt Double
wi <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
ihi
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   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 Bool
wanttPtr <- Bool
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
      Ptr Bool
wantzPtr <- Bool
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      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
iloPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr Double
hPtr <- IOArray (ZeroInt, 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, ZeroInt) Double
h
      Ptr CInt
ldhPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr Double
wrPtr <- 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
wr
      Ptr Double
wiPtr <- 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
wi
      Ptr CInt
ilozPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
      Ptr CInt
ihizPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
      Ptr Double
zPtr <- IOArray (ZeroInt, 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, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt 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, 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 (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 Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laqr4 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
hPtr Ptr CInt
ldhPtr Ptr Double
wrPtr Ptr Double
wiPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
lworkPtr 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 (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 (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 (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
wr
         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 (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
wi
         IO (Int -> (Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqr5.f>
laqr5 ::
   Bool {- ^ wantt -} ->
   Bool {- ^ wantz -} ->
   Int {- ^ kacc22 -} ->
   Int {- ^ ktop -} ->
   Int {- ^ kbot -} ->
   IOArray ZeroInt Double {- ^ sr -} ->
   IOArray ZeroInt Double {- ^ si -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ h -} ->
   Int {- ^ iloz -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   Int {- ^ ldv -} ->
   Int {- ^ ldu -} ->
   Int {- ^ nv -} ->
   Int {- ^ ldwv -} ->
   Int {- ^ nh -} ->
   Int {- ^ ldwh -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double)
laqr5 :: Bool
-> Bool
-> Int
-> Int
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
laqr5 Bool
wantt Bool
wantz Int
kacc22 Int
ktop Int
kbot IOArray ZeroInt Double
sr IOArray ZeroInt Double
si IOArray (ZeroInt, ZeroInt) Double
h Int
iloz IOArray (ZeroInt, ZeroInt) Double
z Int
ldv Int
ldu Int
nv Int
ldwv Int
nh Int
ldwh = do
   let srDim0 :: Int
srDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
sr
   let siDim0 :: Int
siDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
si
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
z
   let nshfts :: Int
nshfts = Int
srDim0
   let n :: Int
n = Int
hDim0
   let ldh :: Int
ldh = Int
hDim1
   let ihiz :: Int
ihiz = Int
zDim0
   let ldz :: Int
ldz = Int
zDim1
   String -> Bool -> IO ()
Call.assert String
"laqr5: nshfts == siDim0" (Int
nshfts Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
siDim0)
   IOArray (ZeroInt, ZeroInt) Double
v <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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) Double
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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) Double
wv <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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) Double
wh <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nh Int
ldwh
   ContT
  (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
  IO
  (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
   IO
   (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
 -> IO
      (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
wanttPtr <- Bool
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
      Ptr Bool
wantzPtr <- Bool
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      Ptr CInt
kacc22Ptr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kacc22
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
ktopPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ktop
      Ptr CInt
kbotPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kbot
      Ptr CInt
nshftsPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nshfts
      Ptr Double
srPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
sr
      Ptr Double
siPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
si
      Ptr Double
hPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
h
      Ptr CInt
ldhPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr CInt
ilozPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
      Ptr CInt
ihizPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
vPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
v
      Ptr CInt
ldvPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr Double
uPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
u
      Ptr CInt
lduPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr CInt
nvPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nv
      Ptr Double
wvPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
wv
      Ptr CInt
ldwvPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwv
      Ptr CInt
nhPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nh
      Ptr Double
whPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
wh
      Ptr CInt
ldwhPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwh
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr 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 Double
srPtr Ptr Double
siPtr Ptr Double
hPtr Ptr CInt
ldhPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
vPtr Ptr CInt
ldvPtr Ptr Double
uPtr Ptr CInt
lduPtr Ptr CInt
nvPtr Ptr Double
wvPtr Ptr CInt
ldwvPtr Ptr CInt
nhPtr Ptr Double
whPtr Ptr CInt
ldwhPtr
      IO
  (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
      IO
      (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double))
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> (Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
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
v
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
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
u
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> (Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double))
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
wv
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> (Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double)
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
wh

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqsb.f>
laqsb ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Array ZeroInt Double {- ^ s -} ->
   Double {- ^ scond -} ->
   Double {- ^ amax -} ->
   IO (Char)
laqsb :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Double
-> Double
-> IO Char
laqsb Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Char (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CChar
-> IO ()
FFI.laqsb Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
amaxPtr Ptr CChar
equedPtr
      IO Char -> ContT Char IO Char
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 (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)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqsp.f>
laqsp ::
   Char {- ^ uplo -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   Array ZeroInt Double {- ^ s -} ->
   Double {- ^ scond -} ->
   Double {- ^ amax -} ->
   IO (Char)
laqsp :: Char
-> IOArray ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> IO Char
laqsp Char
uplo IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
apPtr <- IOArray ZeroInt Double -> FortranIO Char (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt 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 (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 Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CChar
-> IO ()
FFI.laqsp Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
amaxPtr Ptr CChar
equedPtr
      IO Char -> ContT Char IO Char
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 (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)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqsy.f>
laqsy ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ s -} ->
   Double {- ^ scond -} ->
   Double {- ^ amax -} ->
   IO (Char)
laqsy :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Double
-> Double
-> IO Char
laqsy Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Char (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CChar
-> IO ()
FFI.laqsy Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
amaxPtr Ptr CChar
equedPtr
      IO Char -> ContT Char IO Char
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 (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)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaqtr.f>
laqtr ::
   Bool {- ^ ltran -} ->
   Bool {- ^ lreal -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ t -} ->
   Array ZeroInt Double {- ^ b -} ->
   Double {- ^ w -} ->
   IOArray ZeroInt Double {- ^ x -} ->
   IO (Double, Int)
laqtr :: Bool
-> Bool
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Double
-> IOArray ZeroInt Double
-> IO (Double, Int)
laqtr Bool
ltran Bool
lreal Array (ZeroInt, ZeroInt) Double
t Array ZeroInt Double
b Double
w IOArray ZeroInt Double
x = do
   let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
t
   let bDim0 :: Int
bDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
b
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
x
   let n :: Int
n = Int
tDim0
   let ldt :: Int
ldt = Int
tDim1
   String -> Bool -> IO ()
Call.assert String
"laqtr: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   String -> Bool -> IO ()
Call.assert String
"laqtr: 2*n == xDim0" (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Double
work <- 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 Bool
ltranPtr <- Bool -> FortranIO (Double, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
ltran
      Ptr Bool
lrealPtr <- Bool -> FortranIO (Double, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
lreal
      Ptr CInt
nPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
tPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
t
      Ptr CInt
ldtPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr Double
bPtr <- 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
b
      Ptr Double
wPtr <- Double -> FortranIO (Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
w
      Ptr Double
scalePtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
xPtr <- 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
x
      Ptr Double
workPtr <- 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
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 (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 Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.laqtr Ptr Bool
ltranPtr Ptr Bool
lrealPtr Ptr CInt
nPtr Ptr Double
tPtr Ptr CInt
ldtPtr Ptr Double
bPtr Ptr Double
wPtr Ptr Double
scalePtr Ptr Double
xPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlar1v.f>
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 Double {- ^ z -} ->
   Bool {- ^ wantnc -} ->
   Int {- ^ r -} ->
   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 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 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
zPtr <- 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
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 (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 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 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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (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 (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 (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 (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

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlar2v.f>
lar2v ::
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ x -} ->
   IOArray ZeroInt Double {- ^ y -} ->
   IOArray ZeroInt Double {- ^ z -} ->
   Int {- ^ incx -} ->
   Array ZeroInt Double {- ^ c -} ->
   Array ZeroInt Double {- ^ s -} ->
   Int {- ^ incc -} ->
   IO ()
lar2v :: Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> IO ()
lar2v Int
n IOArray ZeroInt Double
x IOArray ZeroInt Double
y IOArray ZeroInt Double
z Int
incx Array ZeroInt Double
c Array ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
s
   let _xSize :: Int
_xSize = Int
xDim0
   let _ySize :: Int
_ySize = Int
yDim0
   let _zSize :: Int
_zSize = Int
zDim0
   String -> Bool -> IO ()
Call.assert String
"lar2v: 1+(n-1)*incc == cDim0" (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
incc Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
   String -> Bool -> IO ()
Call.assert String
"lar2v: 1+(n-1)*incc == sDim0" (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
incc Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
xPtr <- IOArray ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
x
      Ptr Double
yPtr <- IOArray ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
y
      Ptr Double
zPtr <- IOArray ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt 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 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 CInt
inccPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incc
      IO () -> ContT () IO ()
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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lar2v Ptr CInt
nPtr Ptr Double
xPtr Ptr Double
yPtr Ptr Double
zPtr Ptr CInt
incxPtr Ptr Double
cPtr Ptr Double
sPtr Ptr CInt
inccPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarf.f>
larf ::
   Char {- ^ side -} ->
   Int {- ^ m -} ->
   Array ZeroInt Double {- ^ v -} ->
   Int {- ^ incv -} ->
   Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO ()
larf :: Char
-> Int
-> Array ZeroInt Double
-> Int
-> Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO ()
larf Char
side Int
m Array ZeroInt Double
v Int
incv Double
tau IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
c
   let _vSize :: Int
_vSize = Int
vDim0
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt 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 Double
vPtr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
v
      Ptr CInt
incvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incv
      Ptr Double
tauPtr <- Double -> FortranIO () (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
      IO () -> ContT () IO ()
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 CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> IO ()
FFI.larf Ptr CChar
sidePtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
vPtr Ptr CInt
incvPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfb.f>
larfb ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Char {- ^ direct -} ->
   Char {- ^ storev -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ v -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ t -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ ldwork -} ->
   IO ()
larfb :: Char
-> Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO ()
larfb Char
side Char
trans Char
direct Char
storev Int
m Array (ZeroInt, ZeroInt) Double
v Array (ZeroInt, ZeroInt) Double
t IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double
vPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
v
      Ptr CInt
ldvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr Double
tPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
t
      Ptr CInt
ldtPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr Double
workPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
work
      Ptr CInt
ldworkPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwork
      IO () -> ContT () IO ()
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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr 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 Double
vPtr Ptr CInt
ldvPtr Ptr Double
tPtr Ptr CInt
ldtPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
ldworkPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfg.f>
larfg ::
   Int {- ^ n -} ->
   Double {- ^ alpha -} ->
   IOArray ZeroInt Double {- ^ x -} ->
   Int {- ^ incx -} ->
   IO (Double, Double)
larfg :: Int
-> Double -> IOArray ZeroInt Double -> Int -> IO (Double, Double)
larfg Int
n Double
alpha IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
x
   let _xSize :: Int
_xSize = 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 Double
alphaPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
alpha
      Ptr Double
xPtr <- IOArray ZeroInt Double -> FortranIO (Double, Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
x
      Ptr CInt
incxPtr <- Int -> FortranIO (Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr Double
tauPtr <- FortranIO (Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Double) IO ()
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 Double -> Ptr Double -> Ptr CInt -> Ptr Double -> IO ()
FFI.larfg Ptr CInt
nPtr Ptr Double
alphaPtr Ptr Double
xPtr Ptr CInt
incxPtr Ptr Double
tauPtr
      IO (Double, Double) -> ContT (Double, Double) IO (Double, Double)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Double -> (Double, Double))
-> IO Double -> IO (Double -> (Double, Double))
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
alphaPtr
         IO (Double -> (Double, Double)) -> IO Double -> IO (Double, Double)
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
tauPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfgp.f>
larfgp ::
   Int {- ^ n -} ->
   Double {- ^ alpha -} ->
   IOArray ZeroInt Double {- ^ x -} ->
   Int {- ^ incx -} ->
   IO (Double, Double)
larfgp :: Int
-> Double -> IOArray ZeroInt Double -> Int -> IO (Double, Double)
larfgp Int
n Double
alpha IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
x
   let _xSize :: Int
_xSize = 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 Double
alphaPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
alpha
      Ptr Double
xPtr <- IOArray ZeroInt Double -> FortranIO (Double, Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
x
      Ptr CInt
incxPtr <- Int -> FortranIO (Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr Double
tauPtr <- FortranIO (Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Double) IO ()
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 Double -> Ptr Double -> Ptr CInt -> Ptr Double -> IO ()
FFI.larfgp Ptr CInt
nPtr Ptr Double
alphaPtr Ptr Double
xPtr Ptr CInt
incxPtr Ptr Double
tauPtr
      IO (Double, Double) -> ContT (Double, Double) IO (Double, Double)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Double -> (Double, Double))
-> IO Double -> IO (Double -> (Double, Double))
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
alphaPtr
         IO (Double -> (Double, Double)) -> IO Double -> IO (Double, Double)
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
tauPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarft.f>
larft ::
   Char {- ^ direct -} ->
   Char {- ^ storev -} ->
   Int {- ^ n -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ v -} ->
   Array ZeroInt Double {- ^ tau -} ->
   Int {- ^ ldt -} ->
   IO (Array (ZeroInt,ZeroInt) Double)
larft :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) Double)
larft Char
direct Char
storev Int
n Array (ZeroInt, ZeroInt) Double
v Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
tau
   let _vSize :: Int
_vSize = Int
vDim0
   let ldv :: Int
ldv = Int
vDim1
   let k :: Int
k = Int
tauDim0
   IOArray (ZeroInt, ZeroInt) Double
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
k Int
ldt
   ContT
  (Array (ZeroInt, ZeroInt) Double)
  IO
  (Array (ZeroInt, ZeroInt) Double)
-> IO (Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double)
   IO
   (Array (ZeroInt, ZeroInt) Double)
 -> IO (Array (ZeroInt, ZeroInt) Double))
-> ContT
     (Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double)
-> IO (Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
directPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
direct
      Ptr CChar
storevPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
storev
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr Double
vPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
v
      Ptr CInt
ldvPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr Double
tauPtr <- Array ZeroInt Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
tau
      Ptr Double
tPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
t
      Ptr CInt
ldtPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.larft Ptr CChar
directPtr Ptr CChar
storevPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
vPtr Ptr CInt
ldvPtr Ptr Double
tauPtr Ptr Double
tPtr Ptr CInt
ldtPtr
      IO (Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double)
      IO
      (Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> 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
t

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarfx.f>
larfx ::
   Char {- ^ side -} ->
   Int {- ^ m -} ->
   Array ZeroInt Double {- ^ v -} ->
   Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO ()
larfx :: Char
-> Int
-> Array ZeroInt Double
-> Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO ()
larfx Char
side Int
m Array ZeroInt Double
v Double
tau IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
c
   let _vSize :: Int
_vSize = Int
vDim0
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt 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 Double
vPtr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
v
      Ptr Double
tauPtr <- Double -> FortranIO () (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
      IO () -> ContT () IO ()
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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> IO ()
FFI.larfx Ptr CChar
sidePtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
vPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlargv.f>
largv ::
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ x -} ->
   Int {- ^ incx -} ->
   IOArray ZeroInt Double {- ^ y -} ->
   Int {- ^ incy -} ->
   Int {- ^ incc -} ->
   IO (Array ZeroInt Double)
largv :: Int
-> IOArray ZeroInt Double
-> Int
-> IOArray ZeroInt Double
-> Int
-> Int
-> IO (Array ZeroInt Double)
largv Int
n IOArray ZeroInt Double
x Int
incx IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
y
   let _xSize :: Int
_xSize = Int
xDim0
   let _ySize :: Int
_ySize = 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 Double
xPtr <- 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
x
      Ptr CInt
incxPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr Double
yPtr <- 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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.largv Ptr CInt
nPtr Ptr Double
xPtr Ptr CInt
incxPtr Ptr Double
yPtr Ptr CInt
incyPtr Ptr Double
cPtr Ptr CInt
inccPtr
      IO (Array ZeroInt Double)
-> ContT (Array ZeroInt Double) IO (Array ZeroInt Double)
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

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarnv.f>
larnv ::
   Int {- ^ idist -} ->
   IOArray ZeroInt CInt {- ^ iseed -} ->
   Int {- ^ n -} ->
   IO (Array ZeroInt Double)
larnv :: Int -> IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt 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 Double
x <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   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
idistPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
idist
      Ptr CInt
iseedPtr <- IOArray ZeroInt CInt -> FortranIO (Array ZeroInt 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 Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
xPtr <- 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
x
      IO () -> ContT (Array ZeroInt Double) IO ()
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 CInt -> Ptr CInt -> Ptr Double -> IO ()
FFI.larnv Ptr CInt
idistPtr Ptr CInt
iseedPtr Ptr CInt
nPtr Ptr Double
xPtr
      IO (Array ZeroInt Double)
-> ContT (Array ZeroInt Double) IO (Array ZeroInt Double)
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
x

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarra.f>
larra ::
   Array ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   IOArray ZeroInt Double {- ^ e2 -} ->
   Double {- ^ spltol -} ->
   Double {- ^ tnrm -} ->
   IO (Int, Array ZeroInt CInt, Int)
larra :: Array ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Double
-> Double
-> IO (Int, Array ZeroInt CInt, Int)
larra Array ZeroInt Double
d IOArray ZeroInt Double
e IOArray ZeroInt Double
e2 Double
spltol Double
tnrm = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt 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
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
e
   let e2Dim0 :: Int
e2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
e2
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"larra: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"larra: n == e2Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
e2Dim0)
   IOArray ZeroInt CInt
isplit <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt CInt, Int) IO (Int, Array ZeroInt CInt, Int)
-> IO (Int, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt CInt, Int) IO (Int, Array ZeroInt CInt, Int)
 -> IO (Int, Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt CInt, Int) IO (Int, Array ZeroInt CInt, Int)
-> IO (Int, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO (Int, 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 <- IOArray ZeroInt Double
-> FortranIO (Int, 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
e2Ptr <- IOArray ZeroInt Double
-> FortranIO (Int, Array ZeroInt CInt, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e2
      Ptr Double
spltolPtr <- Double -> FortranIO (Int, Array ZeroInt CInt, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
spltol
      Ptr Double
tnrmPtr <- Double -> FortranIO (Int, Array ZeroInt CInt, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
tnrm
      Ptr CInt
nsplitPtr <- FortranIO (Int, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
isplitPtr <- IOArray ZeroInt CInt
-> FortranIO (Int, Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isplit
      Ptr CInt
infoPtr <- FortranIO (Int, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Int, Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.larra Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
e2Ptr Ptr Double
spltolPtr Ptr Double
tnrmPtr Ptr CInt
nsplitPtr Ptr CInt
isplitPtr Ptr CInt
infoPtr
      IO (Int, Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt CInt, Int) IO (Int, Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt CInt, Int) IO (Int, Array ZeroInt CInt, Int))
-> IO (Int, Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt CInt, Int) IO (Int, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt CInt -> Int -> (Int, Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt CInt -> Int -> (Int, Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Int
   -> Array ZeroInt CInt -> Int -> (Int, Array ZeroInt CInt, Int))
-> IO Int
-> IO (Array ZeroInt CInt -> Int -> (Int, Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
nsplitPtr)
         IO (Array ZeroInt CInt -> Int -> (Int, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO (Int -> (Int, Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isplit
         IO (Int -> (Int, Array ZeroInt CInt, Int))
-> IO Int -> IO (Int, Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrb.f>
larrb ::
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ lld -} ->
   Int {- ^ ifirst -} ->
   Int {- ^ ilast -} ->
   Double {- ^ rtol1 -} ->
   Double {- ^ rtol2 -} ->
   Int {- ^ offset -} ->
   IOArray ZeroInt Double {- ^ w -} ->
   IOArray ZeroInt Double {- ^ wgap -} ->
   IOArray ZeroInt Double {- ^ werr -} ->
   Double {- ^ pivmin -} ->
   Double {- ^ spdiam -} ->
   Int {- ^ twist -} ->
   IO (Int)
larrb :: Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> Int
-> Double
-> Double
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Double
-> Double
-> Int
-> IO Int
larrb Array ZeroInt Double
d Array ZeroInt Double
lld Int
ifirst Int
ilast Double
rtol1 Double
rtol2 Int
offset IOArray ZeroInt Double
w IOArray ZeroInt Double
wgap IOArray ZeroInt Double
werr Double
pivmin Double
spdiam Int
twist = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
d
   let lldDim0 :: Int
lldDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
lld
   let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
w
   let wgapDim0 :: Int
wgapDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
wgap
   let werrDim0 :: Int
werrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
werr
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"larrb: n-1 == lldDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
lldDim0)
   String -> Bool -> IO ()
Call.assert String
"larrb: n == wDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
   String -> Bool -> IO ()
Call.assert String
"larrb: n-1 == wgapDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wgapDim0)
   String -> Bool -> IO ()
Call.assert String
"larrb: n == werrDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
werrDim0)
   IOArray ZeroInt 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr 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 Double
lldPtr <- 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
lld
      Ptr CInt
ifirstPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ifirst
      Ptr CInt
ilastPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilast
      Ptr Double
rtol1Ptr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rtol1
      Ptr Double
rtol2Ptr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rtol2
      Ptr CInt
offsetPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
offset
      Ptr Double
wPtr <- 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
w
      Ptr Double
wgapPtr <- 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
wgap
      Ptr Double
werrPtr <- 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
werr
      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
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 Double
pivminPtr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
pivmin
      Ptr Double
spdiamPtr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
spdiam
      Ptr CInt
twistPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
twist
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.larrb Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
lldPtr Ptr CInt
ifirstPtr Ptr CInt
ilastPtr Ptr Double
rtol1Ptr Ptr Double
rtol2Ptr Ptr CInt
offsetPtr Ptr Double
wPtr Ptr Double
wgapPtr Ptr Double
werrPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr Double
pivminPtr Ptr Double
spdiamPtr Ptr CInt
twistPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrc.f>
larrc ::
   Char {- ^ jobt -} ->
   Double {- ^ vl -} ->
   Double {- ^ vu -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ e -} ->
   Double {- ^ pivmin -} ->
   IO (Int, Int, Int, Int)
larrc :: Char
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> IO (Int, Int, Int, Int)
larrc Char
jobt Double
vl Double
vu Array ZeroInt Double
d Array ZeroInt Double
e Double
pivmin = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt 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 n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"larrc: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   ContT (Int, Int, Int, Int) IO (Int, Int, Int, Int)
-> IO (Int, Int, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int, Int, Int) IO (Int, Int, Int, Int)
 -> IO (Int, Int, Int, Int))
-> ContT (Int, Int, Int, Int) IO (Int, Int, Int, Int)
-> IO (Int, Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobtPtr <- Char -> FortranIO (Int, Int, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobt
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
vlPtr <- Double -> FortranIO (Int, Int, Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vl
      Ptr Double
vuPtr <- Double -> FortranIO (Int, Int, Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vu
      Ptr Double
dPtr <- Array ZeroInt Double -> FortranIO (Int, Int, Int, 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 (Int, Int, Int, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
e
      Ptr Double
pivminPtr <- Double -> FortranIO (Int, Int, Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
pivmin
      Ptr CInt
eigcntPtr <- FortranIO (Int, Int, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
lcntPtr <- FortranIO (Int, Int, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
rcntPtr <- FortranIO (Int, Int, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO (Int, Int, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Int, Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int, Int, Int) IO ())
-> IO () -> ContT (Int, Int, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.larrc Ptr CChar
jobtPtr Ptr CInt
nPtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
pivminPtr Ptr CInt
eigcntPtr Ptr CInt
lcntPtr Ptr CInt
rcntPtr Ptr CInt
infoPtr
      IO (Int, Int, Int, Int)
-> ContT (Int, Int, Int, Int) IO (Int, Int, Int, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int, Int, Int)
 -> ContT (Int, Int, Int, Int) IO (Int, Int, Int, Int))
-> IO (Int, Int, Int, Int)
-> ContT (Int, Int, Int, Int) IO (Int, Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Int -> Int -> Int -> Int -> (Int, Int, Int, Int))
-> IO (Int -> Int -> Int -> Int -> (Int, Int, Int, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO (Int -> Int -> Int -> Int -> (Int, Int, Int, Int))
-> IO Int -> IO (Int -> Int -> Int -> (Int, Int, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
eigcntPtr)
         IO (Int -> Int -> Int -> (Int, Int, Int, Int))
-> IO Int -> IO (Int -> Int -> (Int, Int, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
lcntPtr)
         IO (Int -> Int -> (Int, Int, Int, Int))
-> IO Int -> IO (Int -> (Int, Int, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
rcntPtr)
         IO (Int -> (Int, Int, Int, Int))
-> IO Int -> IO (Int, Int, Int, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrd.f>
larrd ::
   Char {- ^ range -} ->
   Char {- ^ order -} ->
   Double {- ^ vl -} ->
   Double {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Array ZeroInt Double {- ^ gers -} ->
   Double {- ^ reltol -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ e -} ->
   Array ZeroInt Double {- ^ e2 -} ->
   Double {- ^ pivmin -} ->
   Int {- ^ nsplit -} ->
   Array ZeroInt CInt {- ^ isplit -} ->
   IO (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double, Array ZeroInt CInt, Array ZeroInt CInt, Int)
larrd :: Char
-> Char
-> Double
-> Double
-> Int
-> Int
-> Array ZeroInt Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Int
-> Array ZeroInt CInt
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
larrd Char
range Char
order Double
vl Double
vu Int
il Int
iu Array ZeroInt Double
gers Double
reltol Array ZeroInt Double
d Array ZeroInt Double
e Array ZeroInt Double
e2 Double
pivmin Int
nsplit Array ZeroInt CInt
isplit = do
   let gersDim0 :: Int
gersDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
gers
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt 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 e2Dim0 :: Int
e2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
e2
   let isplitDim0 :: Int
isplitDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
isplit
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"larrd: 2*n == gersDim0" (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
gersDim0)
   String -> Bool -> IO ()
Call.assert String
"larrd: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"larrd: n-1 == e2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
e2Dim0)
   String -> Bool -> IO ()
Call.assert String
"larrd: n == isplitDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
isplitDim0)
   IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
werr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
iblock <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
indexw <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
    Array ZeroInt CInt, Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
    Array ZeroInt CInt, Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
rangePtr <- Char
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
      Ptr CChar
orderPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
order
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
vlPtr <- Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, 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 Double, Double, Double,
      Array ZeroInt CInt, 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 Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
      Ptr CInt
iuPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
      Ptr Double
gersPtr <- Array ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, 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 Double
reltolPtr <- Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
reltol
      Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, 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
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, 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 Double
e2Ptr <- Array ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
e2
      Ptr Double
pivminPtr <- Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
pivmin
      Ptr CInt
nsplitPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nsplit
      Ptr CInt
isplitPtr <- Array ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
isplit
      Ptr CInt
mPtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
   Array ZeroInt CInt, 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 Double, Double, Double,
      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
w
      Ptr Double
werrPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      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
werr
      Ptr Double
wlPtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Int)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
wuPtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Int)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
iblockPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iblock
      Ptr CInt
indexwPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indexw
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
   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 Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.larrd Ptr CChar
rangePtr Ptr CChar
orderPtr Ptr CInt
nPtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Double
gersPtr Ptr Double
reltolPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
e2Ptr Ptr Double
pivminPtr Ptr CInt
nsplitPtr Ptr CInt
isplitPtr Ptr CInt
mPtr Ptr Double
wPtr Ptr Double
werrPtr Ptr Double
wlPtr Ptr Double
wuPtr Ptr CInt
iblockPtr Ptr CInt
indexwPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
    Array ZeroInt CInt, Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Double
 -> Double
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
     Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Double
      -> Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
          Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Double
   -> Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
       Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Double
      -> Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
          Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double
   -> Double
   -> Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
       Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Double
      -> Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
          Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
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 Double
   -> Double
   -> Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
       Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Double
      -> Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
          Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
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
werr
         IO
  (Double
   -> Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
       Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Double
-> IO
     (Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
          Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
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
wlPtr
         IO
  (Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
       Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Double
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
          Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
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
wuPtr
         IO
  (Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
       Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
          Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
iblock
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
       Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
          Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indexw
         IO
  (Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double, Double,
       Double, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double, Double, Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarre.f>
larre ::
   Char {- ^ range -} ->
   Double {- ^ vl -} ->
   Double {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   IOArray ZeroInt Double {- ^ e2 -} ->
   Double {- ^ rtol1 -} ->
   Double {- ^ rtol2 -} ->
   Double {- ^ spltol -} ->
   IO (Double, Double, Int, Array ZeroInt CInt, Int, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double, Double, Int)
larre :: Char
-> Double
-> Double
-> Int
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Double
-> Double
-> Double
-> IO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
larre Char
range Double
vl Double
vu Int
il Int
iu IOArray ZeroInt Double
d IOArray ZeroInt Double
e IOArray ZeroInt Double
e2 Double
rtol1 Double
rtol2 Double
spltol = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt 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 e2Dim0 :: Int
e2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
e2
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"larre: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"larre: n == e2Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
e2Dim0)
   IOArray ZeroInt CInt
isplit <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
werr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
wgap <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
iblock <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
indexw <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
gers <- 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)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
6Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Double, Double, Int, Array ZeroInt CInt, Int,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
   Double, Int)
  IO
  (Double, Double, Int, Array ZeroInt CInt, Int,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
   Double, Int)
-> IO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Double, Double, Int, Array ZeroInt CInt, Int,
    Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
    Double, Int)
   IO
   (Double, Double, Int, Array ZeroInt CInt, Int,
    Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
    Double, Int)
 -> IO
      (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> ContT
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     IO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
-> IO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
rangePtr <- Char
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
vlPtr <- Double
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vl
      Ptr Double
vuPtr <- Double
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vu
      Ptr CInt
ilPtr <- Int
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
      Ptr CInt
iuPtr <- Int
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      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
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
      Ptr Double
e2Ptr <- IOArray ZeroInt Double
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e2
      Ptr Double
rtol1Ptr <- Double
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rtol1
      Ptr Double
rtol2Ptr <- Double
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rtol2
      Ptr Double
spltolPtr <- Double
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
spltol
      Ptr CInt
nsplitPtr <- FortranIO
  (Double, Double, Int, Array ZeroInt CInt, Int,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
   Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
isplitPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isplit
      Ptr CInt
mPtr <- FortranIO
  (Double, Double, Int, Array ZeroInt CInt, Int,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
   Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
wPtr <- IOArray ZeroInt Double
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, 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
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, 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
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, 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 <- IOArray ZeroInt CInt
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iblock
      Ptr CInt
indexwPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indexw
      Ptr Double
gersPtr <- IOArray ZeroInt Double
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
gers
      Ptr Double
pivminPtr <- FortranIO
  (Double, Double, Int, Array ZeroInt CInt, Int,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
   Double, Int)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      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
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt 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, Array ZeroInt CInt, Int,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
   Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.larre Ptr CChar
rangePtr Ptr CInt
nPtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
e2Ptr Ptr Double
rtol1Ptr Ptr Double
rtol2Ptr Ptr Double
spltolPtr Ptr CInt
nsplitPtr Ptr CInt
isplitPtr Ptr CInt
mPtr Ptr Double
wPtr Ptr Double
werrPtr Ptr Double
wgapPtr Ptr CInt
iblockPtr Ptr CInt
indexwPtr Ptr Double
gersPtr Ptr Double
pivminPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Double, Double, Int, Array ZeroInt CInt, Int,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
   Double, Int)
-> ContT
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     IO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Double, Double, Int, Array ZeroInt CInt, Int,
    Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
    Double, Int)
 -> ContT
      (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int)
      IO
      (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> IO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
-> ContT
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
     IO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double
 -> Double
 -> Int
 -> Array ZeroInt CInt
 -> Int
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Array ZeroInt Double
 -> Double
 -> Int
 -> (Double, Double, Int, Array ZeroInt CInt, Int,
     Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
     Double, Int))
-> IO
     (Double
      -> Double
      -> Int
      -> Array ZeroInt CInt
      -> Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt Double
      -> Double
      -> Int
      -> (Double, Double, Int, Array ZeroInt CInt, Int,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
          Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,,)
         IO
  (Double
   -> Double
   -> Int
   -> Array ZeroInt CInt
   -> Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt Double
   -> Double
   -> Int
   -> (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> IO Double
-> IO
     (Double
      -> Int
      -> Array ZeroInt CInt
      -> Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt Double
      -> Double
      -> Int
      -> (Double, Double, Int, Array ZeroInt CInt, Int,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
          Double, Int))
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
vlPtr
         IO
  (Double
   -> Int
   -> Array ZeroInt CInt
   -> Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt Double
   -> Double
   -> Int
   -> (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> IO Double
-> IO
     (Int
      -> Array ZeroInt CInt
      -> Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt Double
      -> Double
      -> Int
      -> (Double, Double, Int, Array ZeroInt CInt, Int,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
          Double, Int))
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
vuPtr
         IO
  (Int
   -> Array ZeroInt CInt
   -> Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt Double
   -> Double
   -> Int
   -> (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> IO Int
-> IO
     (Array ZeroInt CInt
      -> Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt Double
      -> Double
      -> Int
      -> (Double, Double, Int, Array ZeroInt CInt, Int,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
          Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
nsplitPtr)
         IO
  (Array ZeroInt CInt
   -> Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt Double
   -> Double
   -> Int
   -> (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt Double
      -> Double
      -> Int
      -> (Double, Double, Int, Array ZeroInt CInt, Int,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
          Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isplit
         IO
  (Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt Double
   -> Double
   -> Int
   -> (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt Double
      -> Double
      -> Int
      -> (Double, Double, Int, Array ZeroInt CInt, Int,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
          Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt Double
   -> Double
   -> Int
   -> (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt Double
      -> Double
      -> Int
      -> (Double, Double, Int, Array ZeroInt CInt, Int,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
          Double, Int))
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 Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt Double
   -> Double
   -> Int
   -> (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt Double
      -> Double
      -> Int
      -> (Double, Double, Int, Array ZeroInt CInt, Int,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
          Double, Int))
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
werr
         IO
  (Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt Double
   -> Double
   -> Int
   -> (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt Double
      -> Double
      -> Int
      -> (Double, Double, Int, Array ZeroInt CInt, Int,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
          Double, Int))
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
wgap
         IO
  (Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt Double
   -> Double
   -> Int
   -> (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt Double
      -> Double
      -> Int
      -> (Double, Double, Int, Array ZeroInt CInt, Int,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
          Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
iblock
         IO
  (Array ZeroInt CInt
   -> Array ZeroInt Double
   -> Double
   -> Int
   -> (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt Double
      -> Double
      -> Int
      -> (Double, Double, Int, Array ZeroInt CInt, Int,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
          Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
indexw
         IO
  (Array ZeroInt Double
   -> Double
   -> Int
   -> (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Double
      -> Int
      -> (Double, Double, Int, Array ZeroInt CInt, Int,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
          Double, Int))
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
gers
         IO
  (Double
   -> Int
   -> (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> IO Double
-> IO
     (Int
      -> (Double, Double, Int, Array ZeroInt CInt, Int,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
          Double, Int))
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
pivminPtr
         IO
  (Int
   -> (Double, Double, Int, Array ZeroInt CInt, Int,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
       Double, Int))
-> IO Int
-> IO
     (Double, Double, Int, Array ZeroInt CInt, Int,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt Double,
      Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrf.f>
larrf ::
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ l -} ->
   Array ZeroInt Double {- ^ ld -} ->
   Int {- ^ clstrt -} ->
   Int {- ^ clend -} ->
   Array ZeroInt Double {- ^ w -} ->
   IOArray ZeroInt Double {- ^ wgap -} ->
   Array ZeroInt Double {- ^ werr -} ->
   Double {- ^ spdiam -} ->
   Double {- ^ clgapl -} ->
   Double {- ^ clgapr -} ->
   Double {- ^ pivmin -} ->
   IO (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
larrf :: Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> Int
-> Array ZeroInt Double
-> IOArray ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> Double
-> Double
-> IO (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
larrf Array ZeroInt Double
d Array ZeroInt Double
l Array ZeroInt Double
ld Int
clstrt Int
clend Array ZeroInt Double
w IOArray ZeroInt Double
wgap Array ZeroInt Double
werr Double
spdiam Double
clgapl Double
clgapr Double
pivmin = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt 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 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 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 werrDim0 :: Int
werrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
werr
   let n :: Int
n = Int
dDim0
   let _wSize :: Int
_wSize = Int
wDim0
   let _wgapSize :: Int
_wgapSize = Int
wgapDim0
   let _werrSize :: Int
_werrSize = Int
werrDim0
   String -> Bool -> IO ()
Call.assert String
"larrf: n-1 == lDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
lDim0)
   String -> Bool -> IO ()
Call.assert String
"larrf: n-1 == ldDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ldDim0)
   IOArray ZeroInt Double
dplus <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
lplus <- 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 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
  (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
  IO
  (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
   IO
   (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
 -> IO (Double, Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO
     (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 Double
lPtr <- Array ZeroInt Double
-> FortranIO
     (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
l
      Ptr Double
ldPtr <- Array ZeroInt Double
-> FortranIO
     (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
ld
      Ptr CInt
clstrtPtr <- Int
-> FortranIO
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
clstrt
      Ptr CInt
clendPtr <- Int
-> FortranIO
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
clend
      Ptr Double
wPtr <- Array ZeroInt Double
-> FortranIO
     (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
w
      Ptr Double
wgapPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
wgap
      Ptr Double
werrPtr <- Array ZeroInt Double
-> FortranIO
     (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
werr
      Ptr Double
spdiamPtr <- Double
-> FortranIO
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
spdiam
      Ptr Double
clgaplPtr <- Double
-> FortranIO
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
clgapl
      Ptr Double
clgaprPtr <- Double
-> FortranIO
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
clgapr
      Ptr Double
pivminPtr <- Double
-> FortranIO
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
pivmin
      Ptr Double
sigmaPtr <- FortranIO
  (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
dplusPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
dplus
      Ptr Double
lplusPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
lplus
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
work
      Ptr CInt
infoPtr <- FortranIO
  (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Double, Array ZeroInt Double, Array ZeroInt Double, Int) IO ())
-> IO ()
-> ContT
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.larrf Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
lPtr Ptr Double
ldPtr Ptr CInt
clstrtPtr Ptr CInt
clendPtr Ptr Double
wPtr Ptr Double
wgapPtr Ptr Double
werrPtr Ptr Double
spdiamPtr Ptr Double
clgaplPtr Ptr Double
clgaprPtr Ptr Double
pivminPtr Ptr Double
sigmaPtr Ptr Double
dplusPtr Ptr Double
lplusPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
 -> ContT
      (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
      IO
      (Double, Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> (Double, Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
     (Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Double, Array ZeroInt Double, Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Double, Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Double, Array ZeroInt Double, Array ZeroInt Double, Int))
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
sigmaPtr
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Double, Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> (Double, Array ZeroInt Double, Array ZeroInt Double, Int))
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
dplus
         IO
  (Array ZeroInt Double
   -> Int
   -> (Double, Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int -> (Double, Array ZeroInt Double, Array ZeroInt Double, Int))
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
lplus
         IO
  (Int -> (Double, Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO (Double, Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrj.f>
larrj ::
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ e2 -} ->
   Int {- ^ ifirst -} ->
   Int {- ^ ilast -} ->
   Double {- ^ rtol -} ->
   Int {- ^ offset -} ->
   IOArray ZeroInt Double {- ^ w -} ->
   IOArray ZeroInt Double {- ^ werr -} ->
   Double {- ^ pivmin -} ->
   Double {- ^ spdiam -} ->
   IO (Int)
larrj :: Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> Int
-> Double
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Double
-> Double
-> IO Int
larrj Array ZeroInt Double
d Array ZeroInt Double
e2 Int
ifirst Int
ilast Double
rtol Int
offset IOArray ZeroInt Double
w IOArray ZeroInt Double
werr Double
pivmin Double
spdiam = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
d
   let e2Dim0 :: Int
e2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
e2
   let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt 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 n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"larrj: n-1 == e2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
e2Dim0)
   String -> Bool -> IO ()
Call.assert String
"larrj: n == wDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
   String -> Bool -> IO ()
Call.assert String
"larrj: n == werrDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
werrDim0)
   IOArray ZeroInt 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr 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 Double
e2Ptr <- 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
e2
      Ptr CInt
ifirstPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ifirst
      Ptr CInt
ilastPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilast
      Ptr Double
rtolPtr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rtol
      Ptr CInt
offsetPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
offset
      Ptr Double
wPtr <- 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
w
      Ptr Double
werrPtr <- 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
werr
      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
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 Double
pivminPtr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
pivmin
      Ptr Double
spdiamPtr <- Double -> FortranIO Int (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
spdiam
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.larrj Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
e2Ptr Ptr CInt
ifirstPtr Ptr CInt
ilastPtr Ptr Double
rtolPtr Ptr CInt
offsetPtr Ptr Double
wPtr Ptr Double
werrPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr Double
pivminPtr Ptr Double
spdiamPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrk.f>
larrk ::
   Int {- ^ iw -} ->
   Double {- ^ gl -} ->
   Double {- ^ gu -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ e2 -} ->
   Double {- ^ pivmin -} ->
   Double {- ^ reltol -} ->
   IO (Double, Double, Int)
larrk :: Int
-> Double
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> Double
-> IO (Double, Double, Int)
larrk Int
iw Double
gl Double
gu Array ZeroInt Double
d Array ZeroInt Double
e2 Double
pivmin Double
reltol = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
d
   let e2Dim0 :: Int
e2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
e2
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"larrk: n-1 == e2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
e2Dim0)
   ContT (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 CInt
nPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iwPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iw
      Ptr Double
glPtr <- Double -> FortranIO (Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
gl
      Ptr Double
guPtr <- Double -> FortranIO (Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
gu
      Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO (Double, Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
d
      Ptr Double
e2Ptr <- Array ZeroInt Double
-> FortranIO (Double, Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
e2
      Ptr Double
pivminPtr <- Double -> FortranIO (Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
pivmin
      Ptr Double
reltolPtr <- Double -> FortranIO (Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
reltol
      Ptr Double
wPtr <- FortranIO (Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
werrPtr <- FortranIO (Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      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 (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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.larrk Ptr CInt
nPtr Ptr CInt
iwPtr Ptr Double
glPtr Ptr Double
guPtr Ptr Double
dPtr Ptr Double
e2Ptr Ptr Double
pivminPtr Ptr Double
reltolPtr Ptr Double
wPtr Ptr Double
werrPtr Ptr CInt
infoPtr
      IO (Double, Double, Int)
-> ContT (Double, Double, Int) IO (Double, Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO (Double -> Double -> Int -> (Double, Double, Int))
-> IO Double -> IO (Double -> Int -> (Double, Double, Int))
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
wPtr
         IO (Double -> Int -> (Double, Double, Int))
-> IO Double -> IO (Int -> (Double, Double, Int))
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
werrPtr
         IO (Int -> (Double, Double, Int))
-> IO Int -> IO (Double, Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrr.f>
larrr ::
   Array ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   IO (Int)
larrr :: Array ZeroInt Double -> IOArray ZeroInt Double -> IO Int
larrr Array ZeroInt Double
d IOArray ZeroInt 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
$ 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
"larrr: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr 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 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 CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
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 Double -> Ptr CInt -> IO ()
FFI.larrr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarrv.f>
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 -} ->
   IO (Array (ZeroInt,ZeroInt) 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) 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) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
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 (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) Double, Array ZeroInt CInt, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
 -> IO (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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 Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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) 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) 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) 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) Double, Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int) IO ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) 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 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 Double
zPtr Ptr CInt
ldzPtr Ptr CInt
isuppzPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Int
 -> (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
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
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int -> (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
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) Double, Array ZeroInt CInt, Int))
-> IO Int
-> IO (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlartg.f>
lartg ::
   Double {- ^ f -} ->
   Double {- ^ g -} ->
   IO (Double, Double, Double)
lartg :: Double -> Double -> IO (Double, Double, Double)
lartg Double
f Double
g = do
   ContT (Double, Double, Double) IO (Double, Double, Double)
-> IO (Double, Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Double, Double) IO (Double, Double, Double)
 -> IO (Double, Double, Double))
-> ContT (Double, Double, Double) IO (Double, Double, Double)
-> IO (Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Double
fPtr <- Double -> FortranIO (Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
f
      Ptr Double
gPtr <- Double -> FortranIO (Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
g
      Ptr Double
csPtr <- FortranIO (Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
snPtr <- FortranIO (Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
rPtr <- FortranIO (Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Double, Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Double, Double) IO ())
-> IO () -> ContT (Double, Double, Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Double
-> Ptr Double -> Ptr Double -> Ptr Double -> Ptr Double -> IO ()
FFI.lartg Ptr Double
fPtr Ptr Double
gPtr Ptr Double
csPtr Ptr Double
snPtr Ptr Double
rPtr
      IO (Double, Double, Double)
-> ContT (Double, Double, Double) IO (Double, Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double, Double)
 -> ContT (Double, Double, Double) IO (Double, Double, Double))
-> IO (Double, Double, Double)
-> ContT (Double, Double, Double) IO (Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ (Double -> Double -> Double -> (Double, Double, Double))
-> IO (Double -> Double -> Double -> (Double, Double, Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO (Double -> Double -> Double -> (Double, Double, Double))
-> IO Double -> IO (Double -> Double -> (Double, Double, Double))
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 (Double -> Double -> (Double, Double, Double))
-> IO Double -> IO (Double -> (Double, Double, Double))
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
snPtr
         IO (Double -> (Double, Double, Double))
-> IO Double -> IO (Double, Double, Double)
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
rPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlartgp.f>
lartgp ::
   Double {- ^ f -} ->
   Double {- ^ g -} ->
   IO (Double, Double, Double)
lartgp :: Double -> Double -> IO (Double, Double, Double)
lartgp Double
f Double
g = do
   ContT (Double, Double, Double) IO (Double, Double, Double)
-> IO (Double, Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Double, Double) IO (Double, Double, Double)
 -> IO (Double, Double, Double))
-> ContT (Double, Double, Double) IO (Double, Double, Double)
-> IO (Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Double
fPtr <- Double -> FortranIO (Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
f
      Ptr Double
gPtr <- Double -> FortranIO (Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
g
      Ptr Double
csPtr <- FortranIO (Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
snPtr <- FortranIO (Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
rPtr <- FortranIO (Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Double, Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Double, Double) IO ())
-> IO () -> ContT (Double, Double, Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Double
-> Ptr Double -> Ptr Double -> Ptr Double -> Ptr Double -> IO ()
FFI.lartgp Ptr Double
fPtr Ptr Double
gPtr Ptr Double
csPtr Ptr Double
snPtr Ptr Double
rPtr
      IO (Double, Double, Double)
-> ContT (Double, Double, Double) IO (Double, Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double, Double)
 -> ContT (Double, Double, Double) IO (Double, Double, Double))
-> IO (Double, Double, Double)
-> ContT (Double, Double, Double) IO (Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ (Double -> Double -> Double -> (Double, Double, Double))
-> IO (Double -> Double -> Double -> (Double, Double, Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO (Double -> Double -> Double -> (Double, Double, Double))
-> IO Double -> IO (Double -> Double -> (Double, Double, Double))
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 (Double -> Double -> (Double, Double, Double))
-> IO Double -> IO (Double -> (Double, Double, Double))
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
snPtr
         IO (Double -> (Double, Double, Double))
-> IO Double -> IO (Double, Double, Double)
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
rPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlartgs.f>
lartgs ::
   Double {- ^ x -} ->
   Double {- ^ y -} ->
   Double {- ^ sigma -} ->
   IO (Double, Double)
lartgs :: Double -> Double -> Double -> IO (Double, Double)
lartgs Double
x Double
y Double
sigma = do
   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 Double
xPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
x
      Ptr Double
yPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
y
      Ptr Double
sigmaPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
sigma
      Ptr Double
csPtr <- FortranIO (Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
snPtr <- FortranIO (Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Double) IO ()
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 Double
-> Ptr Double -> Ptr Double -> Ptr Double -> Ptr Double -> IO ()
FFI.lartgs Ptr Double
xPtr Ptr Double
yPtr Ptr Double
sigmaPtr Ptr Double
csPtr Ptr Double
snPtr
      IO (Double, Double) -> ContT (Double, Double) IO (Double, Double)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Double -> (Double, Double))
-> IO Double -> IO (Double -> (Double, Double))
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 (Double -> (Double, Double)) -> IO Double -> IO (Double, Double)
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
snPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlartv.f>
lartv ::
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ x -} ->
   Int {- ^ incx -} ->
   IOArray ZeroInt Double {- ^ y -} ->
   Int {- ^ incy -} ->
   Array ZeroInt Double {- ^ c -} ->
   Array ZeroInt Double {- ^ s -} ->
   Int {- ^ incc -} ->
   IO ()
lartv :: Int
-> IOArray ZeroInt Double
-> Int
-> IOArray ZeroInt Double
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> IO ()
lartv Int
n IOArray ZeroInt Double
x Int
incx IOArray ZeroInt Double
y Int
incy Array ZeroInt Double
c Array ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
s
   let _xSize :: Int
_xSize = Int
xDim0
   let _ySize :: Int
_ySize = Int
yDim0
   String -> Bool -> IO ()
Call.assert String
"lartv: 1+(n-1)*incc == cDim0" (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
incc Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
   String -> Bool -> IO ()
Call.assert String
"lartv: 1+(n-1)*incc == sDim0" (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
incc Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
xPtr <- IOArray ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
x
      Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr Double
yPtr <- IOArray ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt 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 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 CInt
inccPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incc
      IO () -> ContT () IO ()
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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lartv Ptr CInt
nPtr Ptr Double
xPtr Ptr CInt
incxPtr Ptr Double
yPtr Ptr CInt
incyPtr Ptr Double
cPtr Ptr Double
sPtr Ptr CInt
inccPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaruv.f>
laruv ::
   IOArray ZeroInt CInt {- ^ iseed -} ->
   Int {- ^ n -} ->
   IO (Array ZeroInt Double)
laruv :: IOArray ZeroInt CInt -> Int -> IO (Array ZeroInt Double)
laruv IOArray ZeroInt CInt
iseed Int
n = do
   let iseedDim0 :: Int
iseedDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
iseed
   String -> Bool -> IO ()
Call.assert String
"laruv: 4 == iseedDim0" (Int
4 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
iseedDim0)
   IOArray ZeroInt Double
x <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   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
iseedPtr <- IOArray ZeroInt CInt -> FortranIO (Array ZeroInt 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 Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
xPtr <- 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
x
      IO () -> ContT (Array ZeroInt Double) IO ()
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 CInt -> Ptr Double -> IO ()
FFI.laruv Ptr CInt
iseedPtr Ptr CInt
nPtr Ptr Double
xPtr
      IO (Array ZeroInt Double)
-> ContT (Array ZeroInt Double) IO (Array ZeroInt Double)
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
x

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarz.f>
larz ::
   Char {- ^ side -} ->
   Int {- ^ m -} ->
   Int {- ^ l -} ->
   Array ZeroInt Double {- ^ v -} ->
   Int {- ^ incv -} ->
   Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO ()
larz :: Char
-> Int
-> Int
-> Array ZeroInt Double
-> Int
-> Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO ()
larz Char
side Int
m Int
l Array ZeroInt Double
v Int
incv Double
tau IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt 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 Double
vPtr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
v
      Ptr CInt
incvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incv
      Ptr Double
tauPtr <- Double -> FortranIO () (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
      IO () -> ContT () IO ()
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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> IO ()
FFI.larz Ptr CChar
sidePtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
lPtr Ptr Double
vPtr Ptr CInt
incvPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarzb.f>
larzb ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Char {- ^ direct -} ->
   Char {- ^ storev -} ->
   Int {- ^ m -} ->
   Int {- ^ l -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ v -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ t -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ ldwork -} ->
   IO ()
larzb :: Char
-> Char
-> Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO ()
larzb Char
side Char
trans Char
direct Char
storev Int
m Int
l Array (ZeroInt, ZeroInt) Double
v Array (ZeroInt, ZeroInt) Double
t IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double
vPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
v
      Ptr CInt
ldvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr Double
tPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
t
      Ptr CInt
ldtPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr Double
workPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
work
      Ptr CInt
ldworkPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwork
      IO () -> ContT () IO ()
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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr 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 Double
vPtr Ptr CInt
ldvPtr Ptr Double
tPtr Ptr CInt
ldtPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
ldworkPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlarzt.f>
larzt ::
   Char {- ^ direct -} ->
   Char {- ^ storev -} ->
   Int {- ^ n -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ v -} ->
   Array ZeroInt Double {- ^ tau -} ->
   Int {- ^ ldt -} ->
   IO (Array (ZeroInt,ZeroInt) Double)
larzt :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) Double)
larzt Char
direct Char
storev Int
n IOArray (ZeroInt, ZeroInt) Double
v Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
tau
   let _vSize :: Int
_vSize = Int
vDim0
   let ldv :: Int
ldv = Int
vDim1
   let k :: Int
k = Int
tauDim0
   IOArray (ZeroInt, ZeroInt) Double
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
k Int
ldt
   ContT
  (Array (ZeroInt, ZeroInt) Double)
  IO
  (Array (ZeroInt, ZeroInt) Double)
-> IO (Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double)
   IO
   (Array (ZeroInt, ZeroInt) Double)
 -> IO (Array (ZeroInt, ZeroInt) Double))
-> ContT
     (Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double)
-> IO (Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
directPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
direct
      Ptr CChar
storevPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
storev
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr Double
vPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
v
      Ptr CInt
ldvPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr Double
tauPtr <- Array ZeroInt Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
tau
      Ptr Double
tPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
t
      Ptr CInt
ldtPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.larzt Ptr CChar
directPtr Ptr CChar
storevPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
vPtr Ptr CInt
ldvPtr Ptr Double
tauPtr Ptr Double
tPtr Ptr CInt
ldtPtr
      IO (Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double)
      IO
      (Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> 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
t

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlas2.f>
las2 ::
   Double {- ^ f -} ->
   Double {- ^ g -} ->
   Double {- ^ h -} ->
   IO (Double, Double)
las2 :: Double -> Double -> Double -> IO (Double, Double)
las2 Double
f Double
g Double
h = do
   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 Double
fPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
f
      Ptr Double
gPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
g
      Ptr Double
hPtr <- Double -> FortranIO (Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
h
      Ptr Double
ssminPtr <- FortranIO (Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
ssmaxPtr <- FortranIO (Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Double) IO ()
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 Double
-> Ptr Double -> Ptr Double -> Ptr Double -> Ptr Double -> IO ()
FFI.las2 Ptr Double
fPtr Ptr Double
gPtr Ptr Double
hPtr Ptr Double
ssminPtr Ptr Double
ssmaxPtr
      IO (Double, Double) -> ContT (Double, Double) IO (Double, Double)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Double -> (Double, Double))
-> IO Double -> IO (Double -> (Double, Double))
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
ssminPtr
         IO (Double -> (Double, Double)) -> IO Double -> IO (Double, Double)
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
ssmaxPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlascl.f>
lascl ::
   Char {- ^ type_ -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   Double {- ^ cfrom -} ->
   Double {- ^ cto -} ->
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Int)
lascl :: Char
-> Int
-> Int
-> Double
-> Double
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
lascl Char
type_ Int
kl Int
ku Double
cfrom Double
cto Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 (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 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 Double
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd0.f>
lasd0 ::
   Int {- ^ sqre -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   Int {- ^ ldu -} ->
   Int {- ^ m -} ->
   Int {- ^ ldvt -} ->
   Int {- ^ smlsiz -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)
lasd0 :: Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
lasd0 Int
sqre IOArray ZeroInt Double
d IOArray ZeroInt Double
e Int
ldu Int
m Int
ldvt Int
smlsiz = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt 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
"lasd0: m-1 == eDim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   IOArray (ZeroInt, ZeroInt) Double
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldu
   IOArray (ZeroInt, ZeroInt) Double
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
m Int
ldvt
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Double
work <- 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
mInt -> Int -> Int
forall a. Num a => a -> Int -> a
^!Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
m)
   ContT
  (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
 -> IO
      (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
sqrePtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, 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
ePtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, 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
e
      Ptr Double
uPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, 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
u
      Ptr CInt
lduPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr Double
vtPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, 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
vt
      Ptr CInt
ldvtPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
      Ptr CInt
smlsizPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
smlsiz
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, 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
iwork
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, 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
work
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lasd0 Ptr CInt
nPtr Ptr CInt
sqrePtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
uPtr Ptr CInt
lduPtr Ptr Double
vtPtr Ptr CInt
ldvtPtr Ptr CInt
smlsizPtr Ptr CInt
iworkPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
u
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
vt
         IO
  (Int
   -> (Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd1.f>
lasd1 ::
   Int {- ^ nl -} ->
   Int {- ^ nr -} ->
   Int {- ^ sqre -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   Double {- ^ alpha -} ->
   Double {- ^ beta -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ u -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ vt -} ->
   IOArray ZeroInt CInt {- ^ idxq -} ->
   IO (Double, Double, Int)
lasd1 :: Int
-> Int
-> Int
-> IOArray ZeroInt Double
-> Double
-> Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt CInt
-> IO (Double, Double, Int)
lasd1 Int
nl Int
nr Int
sqre IOArray ZeroInt Double
d Double
alpha Double
beta IOArray (ZeroInt, ZeroInt) Double
u IOArray (ZeroInt, ZeroInt) Double
vt IOArray ZeroInt CInt
idxq = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
d
   let (Int
uDim0,Int
uDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
vt
   let idxqDim0 :: Int
idxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
idxq
   let _dSize :: Int
_dSize = Int
dDim0
   let n :: Int
n = Int
uDim0
   let ldu :: Int
ldu = Int
uDim1
   let m :: Int
m = Int
vtDim0
   let ldvt :: Int
ldvt = Int
vtDim1
   String -> Bool -> IO ()
Call.assert String
"lasd1: n == idxqDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
idxqDim0)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Double
work <- 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
mInt -> Int -> Int
forall a. Num a => a -> Int -> a
^!Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
m)
   ContT (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 CInt
nlPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nl
      Ptr CInt
nrPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nr
      Ptr CInt
sqrePtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO (Double, 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
alphaPtr <- Double -> FortranIO (Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
alpha
      Ptr Double
betaPtr <- Double -> FortranIO (Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
beta
      Ptr Double
uPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
u
      Ptr CInt
lduPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr Double
vtPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
vt
      Ptr CInt
ldvtPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
      Ptr CInt
idxqPtr <- 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
idxq
      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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO (Double, 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 (Double, Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Double, Int) IO ()
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 CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lasd1 Ptr CInt
nlPtr Ptr CInt
nrPtr Ptr CInt
sqrePtr Ptr Double
dPtr Ptr Double
alphaPtr Ptr Double
betaPtr Ptr Double
uPtr Ptr CInt
lduPtr Ptr Double
vtPtr Ptr CInt
ldvtPtr Ptr CInt
idxqPtr Ptr CInt
iworkPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Double, Double, Int)
-> ContT (Double, Double, Int) IO (Double, Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO (Double -> Double -> Int -> (Double, Double, Int))
-> IO Double -> IO (Double -> Int -> (Double, Double, Int))
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
alphaPtr
         IO (Double -> Int -> (Double, Double, Int))
-> IO Double -> IO (Int -> (Double, Double, Int))
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
betaPtr
         IO (Int -> (Double, Double, Int))
-> IO Int -> IO (Double, Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd2.f>
lasd2 ::
   Int {- ^ nl -} ->
   Int {- ^ nr -} ->
   Int {- ^ sqre -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   Double {- ^ alpha -} ->
   Double {- ^ beta -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ u -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ vt -} ->
   Int {- ^ ldu2 -} ->
   Int {- ^ ldvt2 -} ->
   IOArray ZeroInt CInt {- ^ idxq -} ->
   IO (Int, Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int)
lasd2 :: Int
-> Int
-> Int
-> IOArray ZeroInt Double
-> Double
-> Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IOArray ZeroInt CInt
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
lasd2 Int
nl Int
nr Int
sqre IOArray ZeroInt Double
d Double
alpha Double
beta IOArray (ZeroInt, ZeroInt) Double
u IOArray (ZeroInt, ZeroInt) Double
vt Int
ldu2 Int
ldvt2 IOArray ZeroInt CInt
idxq = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
d
   let (Int
uDim0,Int
uDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
vt
   let idxqDim0 :: Int
idxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
idxq
   let n :: Int
n = Int
dDim0
   let ldu :: Int
ldu = Int
uDim1
   let _m :: Int
_m = Int
vtDim0
   let ldvt :: Int
ldvt = Int
vtDim1
   String -> Bool -> IO ()
Call.assert String
"lasd2: n == uDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
uDim0)
   String -> Bool -> IO ()
Call.assert String
"lasd2: n == idxqDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
idxqDim0)
   IOArray ZeroInt Double
z <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
dsigma <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
u2 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldu2
   IOArray (ZeroInt, ZeroInt) Double
vt2 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvt2
   IOArray ZeroInt CInt
idxp <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
idx <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
idxc <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
coltyp <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
    Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
    Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nlPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nl
      Ptr CInt
nrPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nr
      Ptr CInt
sqrePtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
      Ptr CInt
kPtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, 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
d
      Ptr Double
zPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, 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
z
      Ptr Double
alphaPtr <- Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
alpha
      Ptr Double
betaPtr <- Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
beta
      Ptr Double
uPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, 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, ZeroInt) Double
u
      Ptr CInt
lduPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr Double
vtPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, 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, ZeroInt) Double
vt
      Ptr CInt
ldvtPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
      Ptr Double
dsigmaPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, 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
dsigma
      Ptr Double
u2Ptr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, 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, ZeroInt) Double
u2
      Ptr CInt
ldu2Ptr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu2
      Ptr Double
vt2Ptr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, 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, ZeroInt) Double
vt2
      Ptr CInt
ldvt2Ptr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt2
      Ptr CInt
idxpPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idxp
      Ptr CInt
idxPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idx
      Ptr CInt
idxcPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idxc
      Ptr CInt
idxqPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idxq
      Ptr CInt
coltypPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
coltyp
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lasd2 Ptr CInt
nlPtr Ptr CInt
nrPtr Ptr CInt
sqrePtr Ptr CInt
kPtr Ptr Double
dPtr Ptr Double
zPtr Ptr Double
alphaPtr Ptr Double
betaPtr Ptr Double
uPtr Ptr CInt
lduPtr Ptr Double
vtPtr Ptr CInt
ldvtPtr Ptr Double
dsigmaPtr Ptr Double
u2Ptr Ptr CInt
ldu2Ptr Ptr Double
vt2Ptr Ptr CInt
ldvt2Ptr Ptr CInt
idxpPtr Ptr CInt
idxPtr Ptr CInt
idxcPtr Ptr CInt
idxqPtr Ptr CInt
coltypPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
    Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Double, Array ZeroInt Double,
     Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
     Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
     Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
kPtr)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
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
z
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
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
dsigma
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
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
u2
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
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
vt2
         IO
  (Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
idxp
         IO
  (Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
idx
         IO
  (Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
idxc
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
coltyp
         IO
  (Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd3.f>
lasd3 ::
   Int {- ^ nl -} ->
   Int {- ^ nr -} ->
   Int {- ^ sqre -} ->
   Int {- ^ ldq -} ->
   IOArray ZeroInt Double {- ^ dsigma -} ->
   Int {- ^ ldu -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ u2 -} ->
   Int {- ^ m -} ->
   Int {- ^ ldvt -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ vt2 -} ->
   Array ZeroInt CInt {- ^ idxc -} ->
   Array ZeroInt CInt {- ^ ctot -} ->
   IOArray ZeroInt Double {- ^ z -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)
lasd3 :: Int
-> Int
-> Int
-> Int
-> IOArray ZeroInt Double
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> IOArray ZeroInt Double
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
lasd3 Int
nl Int
nr Int
sqre Int
ldq IOArray ZeroInt Double
dsigma Int
ldu Array (ZeroInt, ZeroInt) Double
u2 Int
m Int
ldvt IOArray (ZeroInt, ZeroInt) Double
vt2 Array ZeroInt CInt
idxc Array ZeroInt CInt
ctot IOArray ZeroInt Double
z = do
   let dsigmaDim0 :: Int
dsigmaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
dsigma
   let (Int
u2Dim0,Int
u2Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
u2
   let (Int
vt2Dim0,Int
vt2Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
vt2
   let idxcDim0 :: Int
idxcDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
idxc
   let ctotDim0 :: Int
ctotDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ctot
   let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
z
   let k :: Int
k = Int
dsigmaDim0
   let n :: Int
n = Int
u2Dim0
   let ldu2 :: Int
ldu2 = Int
u2Dim1
   let ldvt2 :: Int
ldvt2 = Int
vt2Dim1
   String -> Bool -> IO ()
Call.assert String
"lasd3: n == vt2Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vt2Dim0)
   String -> Bool -> IO ()
Call.assert String
"lasd3: n == idxcDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
idxcDim0)
   String -> Bool -> IO ()
Call.assert String
"lasd3: 4 == ctotDim0" (Int
4 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ctotDim0)
   String -> Bool -> IO ()
Call.assert String
"lasd3: k == zDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt Double
d <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
k
   IOArray (ZeroInt, ZeroInt) Double
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
k Int
ldq
   IOArray (ZeroInt, ZeroInt) Double
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldu
   IOArray (ZeroInt, ZeroInt) Double
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
m Int
ldvt
   ContT
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
 -> IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nlPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nl
      Ptr CInt
nrPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nr
      Ptr CInt
sqrePtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
      Ptr CInt
kPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, 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
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, 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
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Double
dsigmaPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, 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
dsigma
      Ptr Double
uPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, 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
u
      Ptr CInt
lduPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr Double
u2Ptr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
u2
      Ptr CInt
ldu2Ptr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu2
      Ptr Double
vtPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, 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
vt
      Ptr CInt
ldvtPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
      Ptr Double
vt2Ptr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, 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
vt2
      Ptr CInt
ldvt2Ptr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt2
      Ptr CInt
idxcPtr <- Array ZeroInt CInt
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, 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
idxc
      Ptr CInt
ctotPtr <- Array ZeroInt CInt
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, 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
ctot
      Ptr Double
zPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, 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
z
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lasd3 Ptr CInt
nlPtr Ptr CInt
nrPtr Ptr CInt
sqrePtr Ptr CInt
kPtr Ptr Double
dPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr Double
dsigmaPtr Ptr Double
uPtr Ptr CInt
lduPtr Ptr Double
u2Ptr Ptr CInt
ldu2Ptr Ptr Double
vtPtr Ptr CInt
ldvtPtr Ptr Double
vt2Ptr Ptr CInt
ldvt2Ptr Ptr CInt
idxcPtr Ptr CInt
ctotPtr Ptr Double
zPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
     Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
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, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
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
q
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
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
u
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Int))
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
vt
         IO
  (Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd4.f>
lasd4 ::
   Int {- ^ i -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ z -} ->
   Double {- ^ rho -} ->
   IO (Array ZeroInt Double, Double, Int)
lasd4 :: Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> IO (Array ZeroInt Double, Double, Int)
lasd4 Int
i Array ZeroInt Double
d Array ZeroInt Double
z Double
rho = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array 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 n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"lasd4: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt Double
delta <- 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
n
   ContT
  (Array ZeroInt Double, Double, Int)
  IO
  (Array ZeroInt Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Double, Int)
   IO
   (Array ZeroInt Double, Double, Int)
 -> IO (Array ZeroInt Double, Double, Int))
-> ContT
     (Array ZeroInt Double, Double, Int)
     IO
     (Array ZeroInt Double, Double, Int)
-> IO (Array ZeroInt Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iPtr <- Int -> FortranIO (Array ZeroInt Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i
      Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO (Array ZeroInt Double, Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
d
      Ptr Double
zPtr <- Array ZeroInt Double
-> FortranIO (Array ZeroInt Double, 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
deltaPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
delta
      Ptr Double
rhoPtr <- Double
-> FortranIO (Array ZeroInt Double, Double, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rho
      Ptr Double
sigmaPtr <- FortranIO (Array ZeroInt Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, 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 (Array ZeroInt Double, Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Double, Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Double, Int) IO ())
-> IO () -> ContT (Array ZeroInt Double, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lasd4 Ptr CInt
nPtr Ptr CInt
iPtr Ptr Double
dPtr Ptr Double
zPtr Ptr Double
deltaPtr Ptr Double
rhoPtr Ptr Double
sigmaPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Double, Int)
-> ContT
     (Array ZeroInt Double, Double, Int)
     IO
     (Array ZeroInt Double, Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Double, Int)
 -> ContT
      (Array ZeroInt Double, Double, Int)
      IO
      (Array ZeroInt Double, Double, Int))
-> IO (Array ZeroInt Double, Double, Int)
-> ContT
     (Array ZeroInt Double, Double, Int)
     IO
     (Array ZeroInt Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Double -> Int -> (Array ZeroInt Double, Double, Int))
-> IO
     (Array ZeroInt Double
      -> Double -> Int -> (Array ZeroInt Double, Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Double
   -> Double -> Int -> (Array ZeroInt Double, Double, Int))
-> IO (Array ZeroInt Double)
-> IO (Double -> Int -> (Array ZeroInt Double, Double, Int))
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
delta
         IO (Double -> Int -> (Array ZeroInt Double, Double, Int))
-> IO Double -> IO (Int -> (Array ZeroInt Double, Double, Int))
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
sigmaPtr
         IO (Int -> (Array ZeroInt Double, Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd5.f>
lasd5 ::
   Int {- ^ i -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ z -} ->
   Double {- ^ rho -} ->
   IO (Array ZeroInt Double, Double)
lasd5 :: Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Double
-> IO (Array ZeroInt Double, Double)
lasd5 Int
i Array ZeroInt Double
d Array ZeroInt Double
z Double
rho = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array 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
   String -> Bool -> IO ()
Call.assert String
"lasd5: 2 == dDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
   String -> Bool -> IO ()
Call.assert String
"lasd5: 2 == zDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt Double
delta <- Int -> IO (IOArray ZeroInt Double)
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
2
   ContT
  (Array ZeroInt Double, Double) IO (Array ZeroInt Double, Double)
-> IO (Array ZeroInt Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Double) IO (Array ZeroInt Double, Double)
 -> IO (Array ZeroInt Double, Double))
-> ContT
     (Array ZeroInt Double, Double) IO (Array ZeroInt Double, Double)
-> IO (Array ZeroInt Double, Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
iPtr <- Int -> FortranIO (Array ZeroInt Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i
      Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO (Array ZeroInt 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
zPtr <- Array ZeroInt Double
-> FortranIO (Array ZeroInt Double, Double) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
z
      Ptr Double
deltaPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt Double, Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
delta
      Ptr Double
rhoPtr <- Double -> FortranIO (Array ZeroInt Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rho
      Ptr Double
dsigmaPtr <- FortranIO (Array ZeroInt Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO (Array ZeroInt 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 (Array ZeroInt Double, Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Double, Double) IO ())
-> IO () -> ContT (Array ZeroInt Double, Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.lasd5 Ptr CInt
iPtr Ptr Double
dPtr Ptr Double
zPtr Ptr Double
deltaPtr Ptr Double
rhoPtr Ptr Double
dsigmaPtr Ptr Double
workPtr
      IO (Array ZeroInt Double, Double)
-> ContT
     (Array ZeroInt Double, Double) IO (Array ZeroInt Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Double, Double)
 -> ContT
      (Array ZeroInt Double, Double) IO (Array ZeroInt Double, Double))
-> IO (Array ZeroInt Double, Double)
-> ContT
     (Array ZeroInt Double, Double) IO (Array ZeroInt Double, Double)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double -> Double -> (Array ZeroInt Double, Double))
-> IO
     (Array ZeroInt Double -> Double -> (Array ZeroInt Double, Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt Double -> Double -> (Array ZeroInt Double, Double))
-> IO (Array ZeroInt Double)
-> IO (Double -> (Array ZeroInt Double, Double))
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
delta
         IO (Double -> (Array ZeroInt Double, Double))
-> IO Double -> IO (Array ZeroInt Double, Double)
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
dsigmaPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd6.f>
lasd6 ::
   Int {- ^ icompq -} ->
   Int {- ^ nl -} ->
   Int {- ^ nr -} ->
   Int {- ^ sqre -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ vf -} ->
   IOArray ZeroInt Double {- ^ vl -} ->
   Double {- ^ alpha -} ->
   Double {- ^ beta -} ->
   IOArray ZeroInt CInt {- ^ idxq -} ->
   Int {- ^ ldgcol -} ->
   Int {- ^ ldgnum -} ->
   Int {- ^ difrSize -} ->
   IO (Double, Double, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double, Int)
lasd6 :: Int
-> Int
-> Int
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Double
-> Double
-> IOArray ZeroInt CInt
-> Int
-> Int
-> Int
-> IO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
lasd6 Int
icompq Int
nl Int
nr Int
sqre IOArray ZeroInt Double
d IOArray ZeroInt Double
vf IOArray ZeroInt Double
vl Double
alpha Double
beta IOArray ZeroInt CInt
idxq Int
ldgcol Int
ldgnum Int
difrSize = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
d
   let vfDim0 :: Int
vfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
vf
   let vlDim0 :: Int
vlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
vl
   let idxqDim0 :: Int
idxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
idxq
   let m :: Int
m = Int
vfDim0
   let n :: Int
n = Int
idxqDim0
   String -> Bool -> IO ()
Call.assert String
"lasd6: nl+nr+1 == dDim0" (Int
nlInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nrInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
   String -> Bool -> IO ()
Call.assert String
"lasd6: m == vlDim0" (Int
m Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vlDim0)
   IOArray ZeroInt CInt
perm <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) CInt
givcol <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) CInt)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
2 Int
ldgcol
   IOArray (ZeroInt, ZeroInt) Double
givnum <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
2 Int
ldgnum
   IOArray (ZeroInt, ZeroInt) Double
poles <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
2 Int
ldgnum
   IOArray ZeroInt Double
difl <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
difr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
difrSize
   IOArray ZeroInt Double
z <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   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
m)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Double, Double, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
  IO
  (Double, Double, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
-> IO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Double, Double, Array ZeroInt CInt, Int,
    Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
    Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
    Int)
   IO
   (Double, Double, Array ZeroInt CInt, Int,
    Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
    Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
    Int)
 -> IO
      (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> ContT
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     IO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
-> IO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
icompqPtr <- Int
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
      Ptr CInt
nlPtr <- Int
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nl
      Ptr CInt
nrPtr <- Int
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nr
      Ptr CInt
sqrePtr <- Int
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, 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
vfPtr <- IOArray ZeroInt Double
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
vf
      Ptr Double
vlPtr <- IOArray ZeroInt Double
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
vl
      Ptr Double
alphaPtr <- Double
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
alpha
      Ptr Double
betaPtr <- Double
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
beta
      Ptr CInt
idxqPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idxq
      Ptr CInt
permPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, 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
  (Double, Double, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
givcolPtr <- IOArray (ZeroInt, ZeroInt) CInt
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, 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 CInt
ldgcolPtr <- Int
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgcol
      Ptr Double
givnumPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, 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
ldgnumPtr <- Int
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgnum
      Ptr Double
polesPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
poles
      Ptr Double
diflPtr <- IOArray ZeroInt Double
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
difl
      Ptr Double
difrPtr <- IOArray ZeroInt Double
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
difr
      Ptr Double
zPtr <- IOArray ZeroInt Double
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
z
      Ptr CInt
kPtr <- FortranIO
  (Double, Double, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
cPtr <- FortranIO
  (Double, Double, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
sPtr <- FortranIO
  (Double, Double, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, 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
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, 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, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr 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
-> Ptr CInt
-> IO ()
FFI.lasd6 Ptr CInt
icompqPtr Ptr CInt
nlPtr Ptr CInt
nrPtr Ptr CInt
sqrePtr Ptr Double
dPtr Ptr Double
vfPtr Ptr Double
vlPtr Ptr Double
alphaPtr Ptr Double
betaPtr Ptr CInt
idxqPtr 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
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Double, Double, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
-> ContT
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     IO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Double, Double, Array ZeroInt CInt, Int,
    Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
    Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
    Int)
 -> ContT
      (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int)
      IO
      (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
-> ContT
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     IO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
forall a b. (a -> b) -> a -> b
$ (Double
 -> Double
 -> Array ZeroInt CInt
 -> Int
 -> Array (ZeroInt, ZeroInt) CInt
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> Double
 -> Double
 -> Int
 -> (Double, Double, Array ZeroInt CInt, Int,
     Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
     Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
     Int))
-> IO
     (Double
      -> Double
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Int
      -> (Double, Double, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,,,)
         IO
  (Double
   -> Double
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Int
   -> (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO Double
-> IO
     (Double
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Int
      -> (Double, Double, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
          Int))
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
alphaPtr
         IO
  (Double
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Int
   -> (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO Double
-> IO
     (Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Int
      -> (Double, Double, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
          Int))
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
betaPtr
         IO
  (Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Int
   -> (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Int
      -> (Double, Double, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
          Int))
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
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Int
   -> (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Int
      -> (Double, Double, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Int
   -> (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO (Array (ZeroInt, ZeroInt) CInt)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Int
      -> (Double, Double, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
          Int))
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
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Int
   -> (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Int
      -> (Double, Double, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
          Int))
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
  (Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Int
   -> (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Int
      -> (Double, Double, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
          Int))
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
poles
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Int
   -> (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Int
      -> (Double, Double, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
          Int))
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
difl
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Int
   -> (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Int
      -> (Double, Double, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
          Int))
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
difr
         IO
  (Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Int
   -> (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> Double
      -> Double
      -> Int
      -> (Double, Double, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
          Int))
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
z
         IO
  (Int
   -> Double
   -> Double
   -> Int
   -> (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO Int
-> IO
     (Double
      -> Double
      -> Int
      -> (Double, Double, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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
   -> Double
   -> Int
   -> (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO Double
-> IO
     (Double
      -> Int
      -> (Double, Double, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
          Int))
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
cPtr
         IO
  (Double
   -> Int
   -> (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO Double
-> IO
     (Int
      -> (Double, Double, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
          Int))
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
  (Int
   -> (Double, Double, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO Int
-> IO
     (Double, Double, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd7.f>
lasd7 ::
   Int {- ^ icompq -} ->
   Int {- ^ nl -} ->
   Int {- ^ nr -} ->
   Int {- ^ sqre -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ vf -} ->
   IOArray ZeroInt Double {- ^ vl -} ->
   Double {- ^ alpha -} ->
   Double {- ^ beta -} ->
   Array ZeroInt CInt {- ^ idxq -} ->
   Int {- ^ ldgcol -} ->
   Int {- ^ ldgnum -} ->
   IO (Int, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Double, Double, Double, Int)
lasd7 :: Int
-> Int
-> Int
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Double
-> Double
-> Array ZeroInt CInt
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
lasd7 Int
icompq Int
nl Int
nr Int
sqre IOArray ZeroInt Double
d IOArray ZeroInt Double
vf IOArray ZeroInt Double
vl Double
alpha Double
beta Array ZeroInt CInt
idxq Int
ldgcol Int
ldgnum = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
d
   let vfDim0 :: Int
vfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
vf
   let vlDim0 :: Int
vlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
vl
   let idxqDim0 :: Int
idxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
idxq
   let n :: Int
n = Int
dDim0
   let m :: Int
m = Int
vfDim0
   String -> Bool -> IO ()
Call.assert String
"lasd7: m == vlDim0" (Int
m Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vlDim0)
   String -> Bool -> IO ()
Call.assert String
"lasd7: n == idxqDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
idxqDim0)
   IOArray ZeroInt Double
z <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   IOArray ZeroInt Double
zw <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   IOArray ZeroInt Double
vfw <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   IOArray ZeroInt Double
vlw <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   IOArray ZeroInt Double
dsigma <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
idx <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
idxp <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
perm <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) CInt
givcol <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) CInt)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
2 Int
ldgcol
   IOArray (ZeroInt, ZeroInt) Double
givnum <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
2 Int
ldgnum
   ContT
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Double, Double, Int)
  IO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Double, Double, Int)
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
    Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
    Double, Double, Int)
   IO
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
    Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
    Double, Double, Int)
 -> IO
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
icompqPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
      Ptr CInt
nlPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nl
      Ptr CInt
nrPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nr
      Ptr CInt
sqrePtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
      Ptr CInt
kPtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Double, Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, 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
d
      Ptr Double
zPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, 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
z
      Ptr Double
zwPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, 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
zw
      Ptr Double
vfPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, 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
vf
      Ptr Double
vfwPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, 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
vfw
      Ptr Double
vlPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, 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
vl
      Ptr Double
vlwPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, 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
vlw
      Ptr Double
alphaPtr <- Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
alpha
      Ptr Double
betaPtr <- Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
beta
      Ptr Double
dsigmaPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, 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
dsigma
      Ptr CInt
idxPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idx
      Ptr CInt
idxpPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
idxp
      Ptr CInt
idxqPtr <- Array ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
idxq
      Ptr CInt
permPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, 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, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Double, Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
givcolPtr <- IOArray (ZeroInt, ZeroInt) CInt
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, 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 CInt
ldgcolPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgcol
      Ptr Double
givnumPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, 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
ldgnumPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgnum
      Ptr Double
cPtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Double, Double, Int)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
sPtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Double, Double, Int)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Double, Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lasd7 Ptr CInt
icompqPtr Ptr CInt
nlPtr Ptr CInt
nrPtr Ptr CInt
sqrePtr Ptr CInt
kPtr Ptr Double
dPtr Ptr Double
zPtr Ptr Double
zwPtr Ptr Double
vfPtr Ptr Double
vfwPtr Ptr Double
vlPtr Ptr Double
vlwPtr Ptr Double
alphaPtr Ptr Double
betaPtr Ptr Double
dsigmaPtr Ptr CInt
idxPtr Ptr CInt
idxpPtr Ptr CInt
idxqPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr CInt
ldgcolPtr Ptr Double
givnumPtr Ptr CInt
ldgnumPtr Ptr Double
cPtr Ptr Double
sPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
   Double, Double, Int)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
    Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
    Double, Double, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int)
      IO
      (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
-> ContT
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
     IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Int
 -> Array (ZeroInt, ZeroInt) CInt
 -> Array (ZeroInt, ZeroInt) Double
 -> Double
 -> Double
 -> Int
 -> (Int, Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
     Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
     Double, Double, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
kPtr)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
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
z
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
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
zw
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
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
vfw
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
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
vlw
         IO
  (Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, 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
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
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
dsigma
         IO
  (Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
idx
         IO
  (Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
idxp
         IO
  (Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
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
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO (Array (ZeroInt, ZeroInt) CInt)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
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
   -> Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Double
      -> Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
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
  (Double
   -> Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO Double
-> IO
     (Double
      -> Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
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
cPtr
         IO
  (Double
   -> Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO Double
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
          Double, Double, Int))
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
  (Int
   -> (Int, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
       Double, Double, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Double,
      Double, Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasd8.f>
lasd8 ::
   Int {- ^ icompq -} ->
   IOArray ZeroInt Double {- ^ z -} ->
   IOArray ZeroInt Double {- ^ vf -} ->
   IOArray ZeroInt Double {- ^ vl -} ->
   Int {- ^ difrSize -} ->
   Int {- ^ lddifr -} ->
   IOArray ZeroInt Double {- ^ dsigma -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Int)
lasd8 :: Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Int
-> Int
-> IOArray ZeroInt Double
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
lasd8 Int
icompq IOArray ZeroInt Double
z IOArray ZeroInt Double
vf IOArray ZeroInt Double
vl Int
difrSize Int
lddifr IOArray ZeroInt Double
dsigma = do
   let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
z
   let vfDim0 :: Int
vfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
vf
   let vlDim0 :: Int
vlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
vl
   let dsigmaDim0 :: Int
dsigmaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
dsigma
   let k :: Int
k = Int
zDim0
   String -> Bool -> IO ()
Call.assert String
"lasd8: k == vfDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vfDim0)
   String -> Bool -> IO ()
Call.assert String
"lasd8: k == vlDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vlDim0)
   String -> Bool -> IO ()
Call.assert String
"lasd8: k == dsigmaDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dsigmaDim0)
   IOArray ZeroInt Double
d <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
k
   IOArray ZeroInt Double
difl <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
k
   IOArray (ZeroInt, ZeroInt) Double
difr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
difrSize Int
lddifr
   IOArray ZeroInt Double
work <- 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
k)
   ContT
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
icompqPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
      Ptr CInt
kPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      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
zPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      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
z
      Ptr Double
vfPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      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
vf
      Ptr Double
vlPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      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
vl
      Ptr Double
diflPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      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
difl
      Ptr Double
difrPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      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
difr
      Ptr CInt
lddifrPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lddifr
      Ptr Double
dsigmaPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      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
dsigma
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      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
work
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, 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, ZeroInt) Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lasd8 Ptr CInt
icompqPtr Ptr CInt
kPtr Ptr Double
dPtr Ptr Double
zPtr Ptr Double
vfPtr Ptr Double
vlPtr Ptr Double
diflPtr Ptr Double
difrPtr Ptr CInt
lddifrPtr Ptr Double
dsigmaPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt Double,
     Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
difl
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
difr
         IO
  (Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasda.f>
lasda ::
   Int {- ^ icompq -} ->
   Int {- ^ smlsiz -} ->
   Int {- ^ sqre -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ e -} ->
   Int {- ^ uSize -} ->
   Int {- ^ ldu -} ->
   Int {- ^ vtSize -} ->
   Int {- ^ kSize -} ->
   Int {- ^ nlvl -} ->
   Int {- ^ difrSize -} ->
   Int {- ^ zSize -} ->
   Int {- ^ polesSize -} ->
   Int {- ^ givptrSize -} ->
   Int {- ^ givcolSize -} ->
   Int {- ^ ldgcol -} ->
   Int {- ^ permSize -} ->
   Int {- ^ givnumSize -} ->
   Int {- ^ cSize -} ->
   Int {- ^ sSize -} ->
   Int {- ^ workSize -} ->
   IO (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)
lasda :: Int
-> Int
-> Int
-> IOArray ZeroInt Double
-> Array ZeroInt Double
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
     (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)
lasda Int
icompq Int
smlsiz Int
sqre IOArray ZeroInt Double
d Array ZeroInt Double
e Int
uSize Int
ldu Int
vtSize Int
kSize Int
nlvl Int
difrSize Int
zSize Int
polesSize Int
givptrSize Int
givcolSize Int
ldgcol Int
permSize Int
givnumSize Int
cSize Int
sSize Int
workSize = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt 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
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
e
   let n :: Int
n = Int
dDim0
   String -> Int -> IO ()
Call.ignore String
"lasda: m-1 == eDim0" Int
eDim0
   IOArray (ZeroInt, ZeroInt) Double
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
uSize Int
ldu
   IOArray (ZeroInt, ZeroInt) Double
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
vtSize Int
ldu
   IOArray ZeroInt CInt
k <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kSize
   IOArray (ZeroInt, ZeroInt) Double
difl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nlvl Int
ldu
   IOArray (ZeroInt, ZeroInt) Double
difr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
difrSize Int
ldu
   IOArray (ZeroInt, ZeroInt) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
zSize Int
ldu
   IOArray (ZeroInt, ZeroInt) Double
poles <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
polesSize Int
ldu
   IOArray ZeroInt CInt
givptr <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
givptrSize
   IOArray (ZeroInt, ZeroInt) CInt
givcol <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) CInt)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
givcolSize Int
ldgcol
   IOArray (ZeroInt, ZeroInt) CInt
perm <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) CInt)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
permSize Int
ldgcol
   IOArray (ZeroInt, ZeroInt) Double
givnum <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
givnumSize Int
ldu
   IOArray ZeroInt Double
c <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
cSize
   IOArray ZeroInt Double
s <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
sSize
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
7Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array (ZeroInt, ZeroInt) 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) 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) 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)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (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) 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) 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))
-> ContT
     (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) 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) 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)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
icompqPtr <- Int
-> FortranIO
     (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)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
      Ptr CInt
smlsizPtr <- Int
-> FortranIO
     (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)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
smlsiz
      Ptr CInt
nPtr <- Int
-> FortranIO
     (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)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
sqrePtr <- Int
-> FortranIO
     (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)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
      Ptr Double
dPtr <- IOArray ZeroInt Double
-> FortranIO
     (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)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
d
      Ptr Double
ePtr <- Array ZeroInt Double
-> FortranIO
     (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)
     (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
e
      Ptr Double
uPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
u
      Ptr CInt
lduPtr <- Int
-> FortranIO
     (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)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr Double
vtPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
vt
      Ptr CInt
kPtr <- IOArray ZeroInt CInt
-> FortranIO
     (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)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
k
      Ptr Double
diflPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
difl
      Ptr Double
difrPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
difr
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr Double
polesPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
poles
      Ptr CInt
givptrPtr <- IOArray ZeroInt CInt
-> FortranIO
     (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)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
givptr
      Ptr CInt
givcolPtr <- IOArray (ZeroInt, ZeroInt) CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) CInt
givcol
      Ptr CInt
ldgcolPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgcol
      Ptr CInt
permPtr <- IOArray (ZeroInt, ZeroInt) CInt
-> FortranIO
     (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)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) CInt
perm
      Ptr Double
givnumPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
givnum
      Ptr Double
cPtr <- IOArray ZeroInt Double
-> FortranIO
     (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)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
c
      Ptr Double
sPtr <- IOArray ZeroInt Double
-> FortranIO
     (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)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
s
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (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)
     (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) 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)
     (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) 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)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (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
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (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
      ())
-> IO ()
-> ContT
     (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
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> 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.lasda Ptr CInt
icompqPtr Ptr CInt
smlsizPtr Ptr CInt
nPtr Ptr CInt
sqrePtr Ptr Double
dPtr Ptr Double
ePtr 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
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (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)
-> ContT
     (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) 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)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (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)
 -> ContT
      (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) 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) 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)
-> ContT
     (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) 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)
forall a b. (a -> b) -> a -> b
$ (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
 -> (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) 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
      -> (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))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,,,)
         IO
  (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
   -> (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) Double)
-> IO
     (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
      -> (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))
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
u
         IO
  (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
   -> (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) Double)
-> IO
     (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
      -> (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))
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
vt
         IO
  (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
   -> (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 CInt)
-> IO
     (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
      -> (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))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
k
         IO
  (Array (ZeroInt, ZeroInt) 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
   -> (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) Double)
-> IO
     (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
      -> (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))
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
difl
         IO
  (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
   -> (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) Double)
-> IO
     (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
      -> (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))
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
difr
         IO
  (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
   -> (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) Double)
-> IO
     (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
      -> (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))
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
z
         IO
  (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
   -> (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) Double)
-> IO
     (Array ZeroInt CInt
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt 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))
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
poles
         IO
  (Array ZeroInt CInt
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt 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 CInt)
-> IO
     (Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt 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))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
givptr
         IO
  (Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt 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) CInt)
-> IO
     (Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt 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))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) CInt
-> IO (Array (ZeroInt, ZeroInt) CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) CInt
givcol
         IO
  (Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt 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) CInt)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt Double
      -> Array ZeroInt 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))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) CInt
-> IO (Array (ZeroInt, ZeroInt) CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) CInt
perm
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt Double
   -> Array ZeroInt 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) Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt 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))
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
  (Array ZeroInt Double
   -> Array ZeroInt 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 Double)
-> IO
     (Array ZeroInt 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))
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
  (Array ZeroInt 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 Double)
-> IO
     (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))
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
   -> (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 Int
-> IO
     (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)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasdq.f>
lasdq ::
   Char {- ^ uplo -} ->
   Int {- ^ sqre -} ->
   Int {- ^ nru -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ vt -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ u -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   IO (Int)
lasdq :: Char
-> Int
-> Int
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
lasdq Char
uplo Int
sqre Int
nru IOArray ZeroInt Double
d IOArray ZeroInt Double
e IOArray (ZeroInt, ZeroInt) Double
vt IOArray (ZeroInt, ZeroInt) Double
u IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
"lasdq: n-1+sqre == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
sqre Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"lasdq: n == uDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
uDim0)
   IOArray ZeroInt 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
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
sqrePtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
ncvtPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ncvt
      Ptr CInt
nruPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nru
      Ptr CInt
nccPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ncc
      Ptr 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 Double
vtPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
vt
      Ptr CInt
ldvtPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
      Ptr Double
uPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
u
      Ptr CInt
lduPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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 (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lasdq Ptr CChar
uploPtr Ptr CInt
sqrePtr Ptr CInt
nPtr Ptr CInt
ncvtPtr Ptr CInt
nruPtr Ptr CInt
nccPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
vtPtr Ptr CInt
ldvtPtr Ptr Double
uPtr Ptr CInt
lduPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasdt.f>
lasdt ::
   Int {- ^ n -} ->
   Int {- ^ msub -} ->
   IO (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt)
lasdt :: Int
-> Int
-> IO
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
lasdt Int
n Int
msub = do
   IOArray ZeroInt CInt
inode <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
ndiml <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
ndimr <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt)
  IO
  (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt)
-> IO
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
    Array ZeroInt CInt)
   IO
   (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
    Array ZeroInt CInt)
 -> IO
      (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt))
-> ContT
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
     IO
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
-> IO
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
lvlPtr <- FortranIO
  (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
ndPtr <- FortranIO
  (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
inodePtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
inode
      Ptr CInt
ndimlPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ndiml
      Ptr CInt
ndimrPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ndimr
      Ptr CInt
msubPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
msub
      IO ()
-> ContT
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt)
      IO
      ())
-> IO ()
-> ContT
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lasdt Ptr CInt
nPtr Ptr CInt
lvlPtr Ptr CInt
ndPtr Ptr CInt
inodePtr Ptr CInt
ndimlPtr Ptr CInt
ndimrPtr Ptr CInt
msubPtr
      IO
  (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
   Array ZeroInt CInt)
-> ContT
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
     IO
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
    Array ZeroInt CInt)
 -> ContT
      (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt)
      IO
      (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt))
-> IO
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
-> ContT
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
     IO
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Int
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
     Array ZeroInt CInt))
-> IO
     (Int
      -> Int
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Int
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt))
-> IO Int
-> IO
     (Int
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
lvlPtr)
         IO
  (Int
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt))
-> IO Int
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ndPtr)
         IO
  (Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
inode
         IO
  (Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
          Array ZeroInt CInt))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ndiml
         IO
  (Array ZeroInt CInt
   -> (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
       Array ZeroInt CInt))
-> IO (Array ZeroInt CInt)
-> IO
     (Int, Int, Array ZeroInt CInt, Array ZeroInt CInt,
      Array ZeroInt CInt)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
ndimr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaset.f>
laset ::
   Char {- ^ uplo -} ->
   Int {- ^ m -} ->
   Int {- ^ n -} ->
   Double {- ^ alpha -} ->
   Double {- ^ beta -} ->
   Int {- ^ lda -} ->
   IO (Array (ZeroInt,ZeroInt) Double)
laset :: Char
-> Int
-> Int
-> Double
-> Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) Double)
laset Char
uplo Int
m Int
n Double
alpha Double
beta Int
lda = do
   IOArray (ZeroInt, ZeroInt) Double
a <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
lda
   ContT
  (Array (ZeroInt, ZeroInt) Double)
  IO
  (Array (ZeroInt, ZeroInt) Double)
-> IO (Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double)
   IO
   (Array (ZeroInt, ZeroInt) Double)
 -> IO (Array (ZeroInt, ZeroInt) Double))
-> ContT
     (Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double)
-> IO (Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
mPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
alphaPtr <- Double -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
alpha
      Ptr Double
betaPtr <- Double -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
beta
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.laset Ptr CChar
uploPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
alphaPtr Ptr Double
betaPtr Ptr Double
aPtr Ptr CInt
ldaPtr
      IO (Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double)
      IO
      (Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array (ZeroInt, ZeroInt) Double)
     IO
     (Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double
-> IO (Array (ZeroInt, ZeroInt) Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Double
a

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq1.f>
lasq1 ::
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   IO (Int)
lasq1 :: IOArray ZeroInt Double -> IOArray ZeroInt Double -> IO Int
lasq1 IOArray ZeroInt Double
d IOArray ZeroInt 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 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
"lasq1: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   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 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 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 (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 Double -> Ptr Double -> Ptr CInt -> IO ()
FFI.lasq1 Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq2.f>
lasq2 ::
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ z -} ->
   IO (Int)
lasq2 :: Int -> IOArray ZeroInt Double -> IO Int
lasq2 Int
n IOArray ZeroInt Double
z = do
   let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
z
   String -> Bool -> IO ()
Call.assert String
"lasq2: 4*n == zDim0" (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
zPtr <- 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
z
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
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 CInt -> IO ()
FFI.lasq2 Ptr CInt
nPtr Ptr Double
zPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq4.f>
lasq4 ::
   Int {- ^ i0 -} ->
   Int {- ^ n0 -} ->
   Array ZeroInt Double {- ^ z -} ->
   Int {- ^ pp -} ->
   Int {- ^ n0in -} ->
   Double {- ^ dmin -} ->
   Double {- ^ dmin1 -} ->
   Double {- ^ dmin2 -} ->
   Double {- ^ dn -} ->
   Double {- ^ dn1 -} ->
   Double {- ^ dn2 -} ->
   Double {- ^ g -} ->
   IO (Double, Int, Double)
lasq4 :: Int
-> Int
-> Array ZeroInt Double
-> Int
-> Int
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> IO (Double, Int, Double)
lasq4 Int
i0 Int
n0 Array ZeroInt Double
z Int
pp Int
n0in Double
dmin Double
dmin1 Double
dmin2 Double
dn Double
dn1 Double
dn2 Double
g = do
   let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
z
   String -> Bool -> IO ()
Call.assert String
"lasq4: 4*n0 == zDim0" (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n0 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   ContT (Double, Int, Double) IO (Double, Int, Double)
-> IO (Double, Int, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Double, Int, Double) IO (Double, Int, Double)
 -> IO (Double, Int, Double))
-> ContT (Double, Int, Double) IO (Double, Int, Double)
-> IO (Double, Int, Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
i0Ptr <- Int -> FortranIO (Double, Int, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i0
      Ptr CInt
n0Ptr <- Int -> FortranIO (Double, Int, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n0
      Ptr Double
zPtr <- Array ZeroInt Double
-> FortranIO (Double, Int, Double) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
z
      Ptr CInt
ppPtr <- Int -> FortranIO (Double, Int, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
pp
      Ptr CInt
n0inPtr <- Int -> FortranIO (Double, Int, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n0in
      Ptr Double
dminPtr <- Double -> FortranIO (Double, Int, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
dmin
      Ptr Double
dmin1Ptr <- Double -> FortranIO (Double, Int, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
dmin1
      Ptr Double
dmin2Ptr <- Double -> FortranIO (Double, Int, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
dmin2
      Ptr Double
dnPtr <- Double -> FortranIO (Double, Int, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
dn
      Ptr Double
dn1Ptr <- Double -> FortranIO (Double, Int, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
dn1
      Ptr Double
dn2Ptr <- Double -> FortranIO (Double, Int, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
dn2
      Ptr Double
tauPtr <- FortranIO (Double, Int, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
ttypePtr <- FortranIO (Double, Int, Double) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
gPtr <- Double -> FortranIO (Double, Int, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
g
      IO () -> ContT (Double, Int, Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Int, Double) IO ())
-> IO () -> ContT (Double, Int, Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> IO ()
FFI.lasq4 Ptr CInt
i0Ptr Ptr CInt
n0Ptr Ptr Double
zPtr Ptr CInt
ppPtr Ptr CInt
n0inPtr Ptr Double
dminPtr Ptr Double
dmin1Ptr Ptr Double
dmin2Ptr Ptr Double
dnPtr Ptr Double
dn1Ptr Ptr Double
dn2Ptr Ptr Double
tauPtr Ptr CInt
ttypePtr Ptr Double
gPtr
      IO (Double, Int, Double)
-> ContT (Double, Int, Double) IO (Double, Int, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Int, Double)
 -> ContT (Double, Int, Double) IO (Double, Int, Double))
-> IO (Double, Int, Double)
-> ContT (Double, Int, Double) IO (Double, Int, Double)
forall a b. (a -> b) -> a -> b
$ (Double -> Int -> Double -> (Double, Int, Double))
-> IO (Double -> Int -> Double -> (Double, Int, Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO (Double -> Int -> Double -> (Double, Int, Double))
-> IO Double -> IO (Int -> Double -> (Double, Int, Double))
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
tauPtr
         IO (Int -> Double -> (Double, Int, Double))
-> IO Int -> IO (Double -> (Double, Int, Double))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ttypePtr)
         IO (Double -> (Double, Int, Double))
-> IO Double -> IO (Double, Int, Double)
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
gPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq5.f>
lasq5 ::
   Int {- ^ i0 -} ->
   Int {- ^ n0 -} ->
   Array ZeroInt Double {- ^ z -} ->
   Int {- ^ pp -} ->
   Double {- ^ tau -} ->
   Double {- ^ sigma -} ->
   Bool {- ^ ieee -} ->
   Double {- ^ eps -} ->
   IO (Double, Double, Double, Double, Double, Double)
lasq5 :: Int
-> Int
-> Array ZeroInt Double
-> Int
-> Double
-> Double
-> Bool
-> Double
-> IO (Double, Double, Double, Double, Double, Double)
lasq5 Int
i0 Int
n0 Array ZeroInt Double
z Int
pp Double
tau Double
sigma Bool
ieee Double
eps = do
   let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
z
   String -> Int -> IO ()
Call.ignore String
"lasq5: 4*n == zDim0" Int
zDim0
   ContT
  (Double, Double, Double, Double, Double, Double)
  IO
  (Double, Double, Double, Double, Double, Double)
-> IO (Double, Double, Double, Double, Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Double, Double, Double, Double, Double, Double)
   IO
   (Double, Double, Double, Double, Double, Double)
 -> IO (Double, Double, Double, Double, Double, Double))
-> ContT
     (Double, Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double)
-> IO (Double, Double, Double, Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
i0Ptr <- Int
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i0
      Ptr CInt
n0Ptr <- Int
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n0
      Ptr Double
zPtr <- Array ZeroInt Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
z
      Ptr CInt
ppPtr <- Int
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
pp
      Ptr Double
tauPtr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
tau
      Ptr Double
sigmaPtr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
sigma
      Ptr Double
dminPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
dmin1Ptr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
dmin2Ptr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
dnPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
dnm1Ptr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
dnm2Ptr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Bool
ieeePtr <- Bool
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
ieee
      Ptr Double
epsPtr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
eps
      IO ()
-> ContT (Double, Double, Double, Double, Double, Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Double, Double, Double, Double, Double, Double) IO ())
-> IO ()
-> ContT (Double, Double, Double, Double, Double, Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Bool
-> Ptr Double
-> IO ()
FFI.lasq5 Ptr CInt
i0Ptr Ptr CInt
n0Ptr Ptr Double
zPtr Ptr CInt
ppPtr Ptr Double
tauPtr Ptr Double
sigmaPtr Ptr Double
dminPtr Ptr Double
dmin1Ptr Ptr Double
dmin2Ptr Ptr Double
dnPtr Ptr Double
dnm1Ptr Ptr Double
dnm2Ptr Ptr Bool
ieeePtr Ptr Double
epsPtr
      IO (Double, Double, Double, Double, Double, Double)
-> ContT
     (Double, Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double, Double, Double, Double, Double)
 -> ContT
      (Double, Double, Double, Double, Double, Double)
      IO
      (Double, Double, Double, Double, Double, Double))
-> IO (Double, Double, Double, Double, Double, Double)
-> ContT
     (Double, Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ (Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> (Double, Double, Double, Double, Double, Double))
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
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
dminPtr
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
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
dmin1Ptr
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
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
dmin2Ptr
         IO
  (Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double -> (Double, Double, Double, Double, Double, Double))
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
dnPtr
         IO
  (Double
   -> Double -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO (Double -> (Double, Double, Double, Double, Double, Double))
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
dnm1Ptr
         IO (Double -> (Double, Double, Double, Double, Double, Double))
-> IO Double -> IO (Double, Double, Double, Double, Double, Double)
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
dnm2Ptr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq6.f>
lasq6 ::
   Int {- ^ i0 -} ->
   Int {- ^ n0 -} ->
   Array ZeroInt Double {- ^ z -} ->
   Int {- ^ pp -} ->
   IO (Double, Double, Double, Double, Double, Double)
lasq6 :: Int
-> Int
-> Array ZeroInt Double
-> Int
-> IO (Double, Double, Double, Double, Double, Double)
lasq6 Int
i0 Int
n0 Array ZeroInt Double
z Int
pp = do
   let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
z
   String -> Int -> IO ()
Call.ignore String
"lasq6: 4*n == zDim0" Int
zDim0
   ContT
  (Double, Double, Double, Double, Double, Double)
  IO
  (Double, Double, Double, Double, Double, Double)
-> IO (Double, Double, Double, Double, Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Double, Double, Double, Double, Double, Double)
   IO
   (Double, Double, Double, Double, Double, Double)
 -> IO (Double, Double, Double, Double, Double, Double))
-> ContT
     (Double, Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double)
-> IO (Double, Double, Double, Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
i0Ptr <- Int
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i0
      Ptr CInt
n0Ptr <- Int
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n0
      Ptr Double
zPtr <- Array ZeroInt Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
z
      Ptr CInt
ppPtr <- Int
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
pp
      Ptr Double
dminPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
dmin1Ptr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
dmin2Ptr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
dnPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
dnm1Ptr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
dnm2Ptr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Double, Double, Double, Double, Double, Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Double, Double, Double, Double, Double, Double) IO ())
-> IO ()
-> ContT (Double, Double, Double, Double, Double, Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.lasq6 Ptr CInt
i0Ptr Ptr CInt
n0Ptr Ptr Double
zPtr Ptr CInt
ppPtr Ptr Double
dminPtr Ptr Double
dmin1Ptr Ptr Double
dmin2Ptr Ptr Double
dnPtr Ptr Double
dnm1Ptr Ptr Double
dnm2Ptr
      IO (Double, Double, Double, Double, Double, Double)
-> ContT
     (Double, Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double, Double, Double, Double, Double)
 -> ContT
      (Double, Double, Double, Double, Double, Double)
      IO
      (Double, Double, Double, Double, Double, Double))
-> IO (Double, Double, Double, Double, Double, Double)
-> ContT
     (Double, Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ (Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> (Double, Double, Double, Double, Double, Double))
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
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
dminPtr
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
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
dmin1Ptr
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
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
dmin2Ptr
         IO
  (Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double -> (Double, Double, Double, Double, Double, Double))
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
dnPtr
         IO
  (Double
   -> Double -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO (Double -> (Double, Double, Double, Double, Double, Double))
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
dnm1Ptr
         IO (Double -> (Double, Double, Double, Double, Double, Double))
-> IO Double -> IO (Double, Double, Double, Double, Double, Double)
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
dnm2Ptr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasr.f>
lasr ::
   Char {- ^ side -} ->
   Char {- ^ pivot -} ->
   Char {- ^ direct -} ->
   Int {- ^ m -} ->
   Array ZeroInt Double {- ^ c -} ->
   Array ZeroInt Double {- ^ s -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO ()
lasr :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO ()
lasr Char
side Char
pivot Char
direct Int
m Array ZeroInt Double
c Array ZeroInt Double
s IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      IO () -> ContT () IO ()
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 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 Double
aPtr Ptr CInt
ldaPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasrt.f>
lasrt ::
   Char {- ^ id_ -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IO (Int)
lasrt :: Char -> IOArray ZeroInt Double -> IO Int
lasrt Char
id_ IOArray ZeroInt Double
d = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
d
   let n :: Int
n = Int
dDim0
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
id_Ptr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
id_
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr 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 CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
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 CInt -> IO ()
FFI.lasrt Ptr CChar
id_Ptr Ptr CInt
nPtr Ptr Double
dPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlassq.f>
lassq ::
   Array ZeroInt Double {- ^ x -} ->
   Int {- ^ incx -} ->
   Double {- ^ scale -} ->
   Double {- ^ sumsq -} ->
   IO (Double, Double)
lassq :: Array ZeroInt Double
-> Int -> Double -> Double -> IO (Double, Double)
lassq Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double
xPtr <- Array ZeroInt Double -> FortranIO (Double, Double) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt 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 (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 Double -> Ptr CInt -> Ptr Double -> Ptr Double -> IO ()
FFI.lassq Ptr CInt
nPtr Ptr Double
xPtr Ptr CInt
incxPtr Ptr Double
scalePtr Ptr Double
sumsqPtr
      IO (Double, Double) -> ContT (Double, Double) IO (Double, Double)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Double -> (Double, Double))
-> IO Double -> IO (Double -> (Double, Double))
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 (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

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasv2.f>
lasv2 ::
   Double {- ^ f -} ->
   Double {- ^ g -} ->
   Double {- ^ h -} ->
   IO (Double, Double, Double, Double, Double, Double)
lasv2 :: Double
-> Double
-> Double
-> IO (Double, Double, Double, Double, Double, Double)
lasv2 Double
f Double
g Double
h = do
   ContT
  (Double, Double, Double, Double, Double, Double)
  IO
  (Double, Double, Double, Double, Double, Double)
-> IO (Double, Double, Double, Double, Double, Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Double, Double, Double, Double, Double, Double)
   IO
   (Double, Double, Double, Double, Double, Double)
 -> IO (Double, Double, Double, Double, Double, Double))
-> ContT
     (Double, Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double)
-> IO (Double, Double, Double, Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Double
fPtr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
f
      Ptr Double
gPtr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
g
      Ptr Double
hPtr <- Double
-> FortranIO
     (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
h
      Ptr Double
ssminPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
ssmaxPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
snrPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
csrPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
snlPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
cslPtr <- FortranIO
  (Double, Double, Double, Double, Double, Double) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Double, Double, Double, Double, Double, Double) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Double, Double, Double, Double, Double, Double) IO ())
-> IO ()
-> ContT (Double, Double, Double, Double, Double, Double) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.lasv2 Ptr Double
fPtr Ptr Double
gPtr Ptr Double
hPtr Ptr Double
ssminPtr Ptr Double
ssmaxPtr Ptr Double
snrPtr Ptr Double
csrPtr Ptr Double
snlPtr Ptr Double
cslPtr
      IO (Double, Double, Double, Double, Double, Double)
-> ContT
     (Double, Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double, Double, Double, Double, Double)
 -> ContT
      (Double, Double, Double, Double, Double, Double)
      IO
      (Double, Double, Double, Double, Double, Double))
-> IO (Double, Double, Double, Double, Double, Double)
-> ContT
     (Double, Double, Double, Double, Double, Double)
     IO
     (Double, Double, Double, Double, Double, Double)
forall a b. (a -> b) -> a -> b
$ (Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> Double
 -> (Double, Double, Double, Double, Double, Double))
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
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
ssminPtr
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
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
ssmaxPtr
         IO
  (Double
   -> Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double
      -> Double
      -> (Double, Double, Double, Double, Double, Double))
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
snrPtr
         IO
  (Double
   -> Double
   -> Double
   -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO
     (Double
      -> Double -> (Double, Double, Double, Double, Double, Double))
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
csrPtr
         IO
  (Double
   -> Double -> (Double, Double, Double, Double, Double, Double))
-> IO Double
-> IO (Double -> (Double, Double, Double, Double, Double, Double))
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
snlPtr
         IO (Double -> (Double, Double, Double, Double, Double, Double))
-> IO Double -> IO (Double, Double, Double, Double, Double, Double)
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
cslPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaswp.f>
laswp ::
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ k1 -} ->
   Int {- ^ k2 -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Int {- ^ incx -} ->
   IO ()
laswp :: IOArray (ZeroInt, ZeroInt) Double
-> Int -> Int -> Array ZeroInt CInt -> Int -> IO ()
laswp IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO () (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 (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 CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laswp Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
k1Ptr Ptr CInt
k2Ptr Ptr CInt
ipivPtr Ptr CInt
incxPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasy2.f>
lasy2 ::
   Bool {- ^ ltranl -} ->
   Bool {- ^ ltranr -} ->
   Int {- ^ isgn -} ->
   Int {- ^ n1 -} ->
   Int {- ^ n2 -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ tl -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ tr -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Double, Array (ZeroInt,ZeroInt) Double, Double, Int)
lasy2 :: Bool
-> Bool
-> Int
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
lasy2 Bool
ltranl Bool
ltranr Int
isgn Int
n1 Int
n2 Array (ZeroInt, ZeroInt) Double
tl Array (ZeroInt, ZeroInt) Double
tr Array (ZeroInt, ZeroInt) Double
b Int
ldx = do
   let (Int
tlDim0,Int
tlDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
tl
   let (Int
trDim0,Int
trDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
tr
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Double
b
   let ldtl :: Int
ldtl = Int
tlDim1
   let ldtr :: Int
ldtr = Int
trDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"lasy2: 2 == tlDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tlDim0)
   String -> Bool -> IO ()
Call.assert String
"lasy2: 2 == trDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
trDim0)
   String -> Bool -> IO ()
Call.assert String
"lasy2: 2 == bDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray (ZeroInt, ZeroInt) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
2 Int
ldx
   ContT
  (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
  IO
  (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
-> IO (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
   IO
   (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
 -> IO (Double, Array (ZeroInt, ZeroInt) Double, Double, Int))
-> ContT
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
     IO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
-> IO (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
ltranlPtr <- Bool
-> FortranIO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
ltranl
      Ptr Bool
ltranrPtr <- Bool
-> FortranIO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
ltranr
      Ptr CInt
isgnPtr <- Int
-> FortranIO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
isgn
      Ptr CInt
n1Ptr <- Int
-> FortranIO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n1
      Ptr CInt
n2Ptr <- Int
-> FortranIO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n2
      Ptr Double
tlPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
tl
      Ptr CInt
ldtlPtr <- Int
-> FortranIO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldtl
      Ptr Double
trPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
tr
      Ptr CInt
ldtrPtr <- Int
-> FortranIO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldtr
      Ptr Double
bPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (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
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
scalePtr <- FortranIO
  (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Double
xnormPtr <- FortranIO
  (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO
  (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) IO ())
-> IO ()
-> ContT
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.lasy2 Ptr Bool
ltranlPtr Ptr Bool
ltranrPtr Ptr CInt
isgnPtr Ptr CInt
n1Ptr Ptr CInt
n2Ptr Ptr Double
tlPtr Ptr CInt
ldtlPtr Ptr Double
trPtr Ptr CInt
ldtrPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
scalePtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
xnormPtr Ptr CInt
infoPtr
      IO (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
-> ContT
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
     IO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
 -> ContT
      (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
      IO
      (Double, Array (ZeroInt, ZeroInt) Double, Double, Int))
-> IO (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
-> ContT
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
     IO
     (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
forall a b. (a -> b) -> a -> b
$ (Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Double
 -> Int
 -> (Double, Array (ZeroInt, ZeroInt) Double, Double, Int))
-> IO
     (Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Int
      -> (Double, Array (ZeroInt, ZeroInt) Double, Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Int
   -> (Double, Array (ZeroInt, ZeroInt) Double, Double, Int))
-> IO Double
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Int
      -> (Double, Array (ZeroInt, ZeroInt) Double, Double, Int))
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
  (Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Int
   -> (Double, Array (ZeroInt, ZeroInt) Double, Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Double
      -> Int -> (Double, Array (ZeroInt, ZeroInt) Double, Double, Int))
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
x
         IO
  (Double
   -> Int -> (Double, Array (ZeroInt, ZeroInt) Double, Double, Int))
-> IO Double
-> IO
     (Int -> (Double, Array (ZeroInt, ZeroInt) Double, Double, Int))
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
xnormPtr
         IO (Int -> (Double, Array (ZeroInt, ZeroInt) Double, Double, Int))
-> IO Int
-> IO (Double, Array (ZeroInt, ZeroInt) Double, Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasyf.f>
lasyf ::
   Char {- ^ uplo -} ->
   Int {- ^ nb -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ ldw -} ->
   IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) Double, Int)
lasyf :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
lasyf Char
uplo Int
nb IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
w <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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) Double, Int)
  IO
  (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
 -> IO
      (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) 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) 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) 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) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array 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
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) 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) Double, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr Double
wPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array 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
w
      Ptr CInt
ldwPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) 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) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lasyf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nbPtr Ptr CInt
kbPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
wPtr Ptr CInt
ldwPtr Ptr CInt
infoPtr
      IO (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt CInt
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Int
      -> Array ZeroInt CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Int
   -> Array ZeroInt CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO
     (Array ZeroInt CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double
   -> Int
   -> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int))
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) Double
   -> Int
   -> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int))
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
w
         IO
  (Int
   -> (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlat2s.f>
lat2s ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ ldsa -} ->
   IO (Array (ZeroInt,ZeroInt) Float, Int)
lat2s :: Char
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
lat2s Char
uplo Array (ZeroInt, ZeroInt) 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) 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) Float
sa <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldsa
   ContT
  (Array (ZeroInt, ZeroInt) Float, Int)
  IO
  (Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Float, Int)
   IO
   (Array (ZeroInt, ZeroInt) Float, Int)
 -> IO (Array (ZeroInt, ZeroInt) Float, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) Float, Int)
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (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) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
saPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
sa
      Ptr CInt
ldsaPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldsa
      Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lat2s Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Float
saPtr Ptr CInt
ldsaPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Float, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Float, Int)
      IO
      (Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Float
 -> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Float
      -> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) Float
   -> Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Float
-> IO (Array (ZeroInt, ZeroInt) Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Float
sa
         IO (Int -> (Array (ZeroInt, ZeroInt) Float, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatbs.f>
latbs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Char {- ^ normin -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IOArray ZeroInt Double {- ^ x -} ->
   IOArray ZeroInt Double {- ^ cnorm -} ->
   IO (Double, Int)
latbs :: Char
-> Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IO (Double, Int)
latbs Char
uplo Char
trans Char
diag Char
normin Int
kd Array (ZeroInt, ZeroInt) Double
ab IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
abPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Double
xPtr <- 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
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 (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 Double
-> Ptr CInt
-> Ptr 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 Double
abPtr Ptr CInt
ldabPtr Ptr Double
xPtr Ptr Double
scalePtr Ptr Double
cnormPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatdf.f>
latdf ::
   Int {- ^ ijob -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ z -} ->
   IOArray ZeroInt Double {- ^ rhs -} ->
   Double {- ^ rdsum -} ->
   Double {- ^ rdscal -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array ZeroInt CInt {- ^ jpiv -} ->
   IO (Double, Double)
latdf :: Int
-> Array (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt Double
-> Double
-> Double
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> IO (Double, Double)
latdf Int
ijob Array (ZeroInt, ZeroInt) Double
z IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
zPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int -> FortranIO (Double, Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
rhsPtr <- IOArray ZeroInt Double -> FortranIO (Double, Double) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.latdf Ptr CInt
ijobPtr Ptr CInt
nPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
rhsPtr Ptr Double
rdsumPtr Ptr Double
rdscalPtr Ptr CInt
ipivPtr Ptr CInt
jpivPtr
      IO (Double, Double) -> ContT (Double, Double) IO (Double, Double)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Double -> (Double, Double))
-> IO Double -> IO (Double -> (Double, Double))
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 (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

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatps.f>
latps ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Char {- ^ normin -} ->
   Array ZeroInt Double {- ^ ap -} ->
   IOArray ZeroInt Double {- ^ x -} ->
   IOArray ZeroInt Double {- ^ cnorm -} ->
   IO (Double, Int)
latps :: Char
-> Char
-> Char
-> Char
-> Array ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IO (Double, Int)
latps Char
uplo Char
trans Char
diag Char
normin Array ZeroInt Double
ap IOArray ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
apPtr <- 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
ap
      Ptr Double
xPtr <- 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
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 (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 Double
-> Ptr 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 Double
apPtr Ptr Double
xPtr Ptr Double
scalePtr Ptr Double
cnormPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatrd.f>
latrd ::
   Char {- ^ uplo -} ->
   Int {- ^ nb -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ ldw -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double)
latrd :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
latrd Char
uplo Int
nb IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
tau <- 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, ZeroInt) Double
w <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldw
   ContT
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double)
  IO
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double)
   IO
   (Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
     (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, ZeroInt) 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, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) 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 Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
      Ptr Double
tauPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
tau
      Ptr Double
wPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
w
      Ptr CInt
ldwPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldw
      IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.latrd Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nbPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
ePtr Ptr Double
tauPtr Ptr Double
wPtr Ptr CInt
ldwPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double,
   Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array ZeroInt Double,
    Array (ZeroInt, ZeroInt) Double)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double)
      IO
      (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
     IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> (Array ZeroInt Double, Array ZeroInt Double,
     Array (ZeroInt, ZeroInt) Double))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double))
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 Double
   -> Array (ZeroInt, ZeroInt) Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array (ZeroInt, ZeroInt) Double))
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
tau
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array (ZeroInt, ZeroInt) Double))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double,
      Array (ZeroInt, ZeroInt) Double)
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
w

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatrs.f>
latrs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Char {- ^ normin -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray ZeroInt Double {- ^ x -} ->
   IOArray ZeroInt Double {- ^ cnorm -} ->
   IO (Double, Int)
latrs :: Char
-> Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IO (Double, Int)
latrs Char
uplo Char
trans Char
diag Char
normin Array (ZeroInt, ZeroInt) Double
a IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Int) (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 (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
xPtr <- 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
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 (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 Double
-> Ptr CInt
-> Ptr 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 Double
aPtr Ptr CInt
ldaPtr Ptr Double
xPtr Ptr Double
scalePtr Ptr Double
cnormPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatrz.f>
latrz ::
   Int {- ^ m -} ->
   Int {- ^ l -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double)
latrz :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double)
latrz Int
m Int
l IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
lPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
l
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Double) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      IO () -> ContT (Array ZeroInt Double) IO ()
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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> IO ()
FFI.latrz Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
lPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr
      IO (Array ZeroInt Double)
-> ContT (Array ZeroInt Double) IO (Array ZeroInt Double)
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
tau

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlauu2.f>
lauu2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Int)
lauu2 :: Char -> IOArray (ZeroInt, ZeroInt) Double -> IO Int
lauu2 Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 (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 CInt -> Ptr CInt -> IO ()
FFI.lauu2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlauum.f>
lauum ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Int)
lauum :: Char -> IOArray (ZeroInt, ZeroInt) Double -> IO Int
lauum Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 (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 CInt -> Ptr CInt -> IO ()
FFI.lauum Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorbdb.f>
orbdb ::
   Char {- ^ trans -} ->
   Char {- ^ signs -} ->
   Int {- ^ m -} ->
   Int {- ^ p -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x11 -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x12 -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x21 -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x22 -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)
orbdb :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
orbdb Char
trans Char
signs Int
m Int
p IOArray (ZeroInt, ZeroInt) Double
x11 IOArray (ZeroInt, ZeroInt) Double
x12 IOArray (ZeroInt, ZeroInt) Double
x21 IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
"orbdb: m-q == x12Dim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x12Dim0)
   String -> Bool -> IO ()
Call.assert String
"orbdb: q == x21Dim0" (Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x21Dim0)
   String -> Bool -> IO ()
Call.assert String
"orbdb: m-q == x22Dim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x22Dim0)
   IOArray ZeroInt 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 Double
taup1 <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
p
   IOArray ZeroInt Double
taup2 <- Int -> IO (IOArray ZeroInt 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 Double
tauq1 <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
   IOArray ZeroInt Double
tauq2 <- Int -> IO (IOArray ZeroInt 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
   ContT
  (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,
   Int)
-> IO
     (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,
    Int)
   IO
   (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,
       Int))
-> ContT
     (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,
      Int)
-> IO
     (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
transPtr <- Char
-> FortranIO
     (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 CChar
signsPtr <- Char
-> FortranIO
     (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
signs
      Ptr CInt
mPtr <- Int
-> FortranIO
     (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,
      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,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
q
      Ptr Double
x11Ptr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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, ZeroInt) Double
x11
      Ptr CInt
ldx11Ptr <- Int
-> FortranIO
     (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
ldx11
      Ptr Double
x12Ptr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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, ZeroInt) Double
x12
      Ptr CInt
ldx12Ptr <- Int
-> FortranIO
     (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
ldx12
      Ptr Double
x21Ptr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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, ZeroInt) Double
x21
      Ptr CInt
ldx21Ptr <- Int
-> FortranIO
     (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
ldx21
      Ptr Double
x22Ptr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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, ZeroInt) Double
x22
      Ptr CInt
ldx22Ptr <- Int
-> FortranIO
     (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
ldx22
      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,
      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,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
phi
      Ptr Double
taup1Ptr <- IOArray ZeroInt Double
-> FortranIO
     (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
taup1
      Ptr Double
taup2Ptr <- IOArray ZeroInt Double
-> FortranIO
     (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
taup2
      Ptr Double
tauq1Ptr <- IOArray ZeroInt Double
-> FortranIO
     (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
tauq1
      Ptr Double
tauq2Ptr <- IOArray ZeroInt Double
-> FortranIO
     (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
tauq2
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (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
lwork
      Ptr CInt
infoPtr <- FortranIO
  (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,
      Int)
     IO
     ()
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,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (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 CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orbdb Ptr CChar
transPtr Ptr CChar
signsPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
qPtr Ptr Double
x11Ptr Ptr CInt
ldx11Ptr Ptr Double
x12Ptr Ptr CInt
ldx12Ptr Ptr Double
x21Ptr Ptr CInt
ldx21Ptr Ptr Double
x22Ptr Ptr CInt
ldx22Ptr Ptr Double
thetaPtr Ptr Double
phiPtr Ptr Double
taup1Ptr Ptr Double
taup2Ptr Ptr Double
tauq1Ptr Ptr Double
tauq2Ptr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO
  (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,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
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,
    Int)
 -> ContT
      (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,
       Int))
-> IO
     (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,
      Int)
     IO
     (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
 -> Int
 -> (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
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
   -> Int
   -> (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, Int))
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 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, 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, Int))
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 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, 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, Int))
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
taup1
         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, 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, Int))
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
taup2
         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, 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, Int))
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
tauq1
         IO
  (Array ZeroInt Double
   -> Int
   -> (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, Int))
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
tauq2
         IO
  (Int
   -> (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,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorcsd.f>
orcsd ::
   Char {- ^ jobu1 -} ->
   Char {- ^ jobu2 -} ->
   Char {- ^ jobv1t -} ->
   Char {- ^ jobv2t -} ->
   Char {- ^ trans -} ->
   Char {- ^ signs -} ->
   Int {- ^ m -} ->
   Int {- ^ p -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x11 -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x12 -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x21 -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x22 -} ->
   Int {- ^ r -} ->
   Int {- ^ ldu1 -} ->
   Int {- ^ ldu2 -} ->
   Int {- ^ ldv1t -} ->
   Int {- ^ ldv2t -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Array (ZeroInt,ZeroInt) Double, Int)
orcsd :: Char
-> Char
-> Char
-> Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
orcsd Char
jobu1 Char
jobu2 Char
jobv1t Char
jobv2t Char
trans Char
signs Int
m Int
p IOArray (ZeroInt, ZeroInt) Double
x11 IOArray (ZeroInt, ZeroInt) Double
x12 IOArray (ZeroInt, ZeroInt) Double
x21 IOArray (ZeroInt, ZeroInt) Double
x22 Int
r Int
ldu1 Int
ldu2 Int
ldv1t Int
ldv2t Int
lwork = do
   let (Int
x11Dim0,Int
x11Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
"orcsd: m-q == x12Dim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x12Dim0)
   String -> Bool -> IO ()
Call.assert String
"orcsd: q == x21Dim0" (Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x21Dim0)
   String -> Bool -> IO ()
Call.assert String
"orcsd: m-q == x22Dim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x22Dim0)
   IOArray ZeroInt Double
theta <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
r
   IOArray (ZeroInt, ZeroInt) Double
u1 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
p Int
ldu1
   IOArray (ZeroInt, ZeroInt) Double
u2 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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) Double
v1t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
q Int
ldv1t
   IOArray (ZeroInt, ZeroInt) Double
v2t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-[Int] -> Int
forall (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) Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobu1Ptr <- Char
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
q
      Ptr Double
x11Ptr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      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
x11
      Ptr CInt
ldx11Ptr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx11
      Ptr Double
x12Ptr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      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
x12
      Ptr CInt
ldx12Ptr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx12
      Ptr Double
x21Ptr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      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
x21
      Ptr CInt
ldx21Ptr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx21
      Ptr Double
x22Ptr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      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
x22
      Ptr CInt
ldx22Ptr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      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
theta
      Ptr Double
u1Ptr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      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
u1
      Ptr CInt
ldu1Ptr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu1
      Ptr Double
u2Ptr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      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
u2
      Ptr CInt
ldu2Ptr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu2
      Ptr Double
v1tPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      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
v1t
      Ptr CInt
ldv1tPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv1t
      Ptr Double
v2tPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      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
v2t
      Ptr CInt
ldv2tPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv2t
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, 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 Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      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
iwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) 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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orcsd Ptr CChar
jobu1Ptr Ptr CChar
jobu2Ptr Ptr CChar
jobv1tPtr Ptr CChar
jobv2tPtr Ptr CChar
transPtr Ptr CChar
signsPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
qPtr Ptr Double
x11Ptr Ptr CInt
ldx11Ptr Ptr Double
x12Ptr Ptr CInt
ldx12Ptr Ptr Double
x21Ptr Ptr CInt
ldx21Ptr Ptr Double
x22Ptr Ptr CInt
ldx22Ptr Ptr Double
thetaPtr Ptr Double
u1Ptr Ptr CInt
ldu1Ptr Ptr Double
u2Ptr Ptr CInt
ldu2Ptr Ptr Double
v1tPtr Ptr CInt
ldv1tPtr Ptr Double
v2tPtr Ptr CInt
ldv2tPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
   Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
    Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
     Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
u1
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
u2
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
v1t
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
          Array (ZeroInt, ZeroInt) Double, Int))
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
v2t
         IO
  (Int
   -> (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
       Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Array (ZeroInt, ZeroInt) Double,
      Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbcon.f>
pbcon ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Double {- ^ anorm -} ->
   IO (Double, Int)
pbcon :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Double
-> IO (Double, Int)
pbcon Char
uplo Int
kd Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (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 Double
abPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (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, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Int) IO ()
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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbcon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbequ.f>
pbequ ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IO (Array ZeroInt Double, Double, Double, Int)
pbequ :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Double, Double, Int)
pbequ Char
uplo Int
kd Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double
abPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.pbequ Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr 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 (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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbrfs.f>
pbrfs ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ afb -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
pbrfs :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
pbrfs Char
uplo Int
kd Array (ZeroInt, ZeroInt) Double
ab Array (ZeroInt, ZeroInt) Double
afb Array (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt 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 Double
abPtr <- Array (ZeroInt, 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, ZeroInt) 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
afbPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
bPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
xPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbrfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
afbPtr Ptr CInt
ldafbPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbstf.f>
pbstf ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IO (Int)
pbstf :: Char -> Int -> IOArray (ZeroInt, ZeroInt) Double -> IO Int
pbstf Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 CInt
-> Ptr CInt
-> IO ()
FFI.pbstf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbsv.f>
pbsv ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
pbsv :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
pbsv Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) Double
ab IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbsv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbsvx.f>
pbsvx ::
   Char {- ^ fact -} ->
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ afb -} ->
   Char {- ^ equed -} ->
   IOArray ZeroInt Double {- ^ s -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Char, Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)
pbsvx :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Char
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
pbsvx Char
fact Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) Double
ab IOArray (ZeroInt, ZeroInt) Double
afb Char
equed IOArray ZeroInt Double
s IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
  IO
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) 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) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
   IO
   (Char, Array (ZeroInt, ZeroInt) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
 -> IO
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Double
afbPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
afb
      Ptr CInt
ldafbPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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) 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) 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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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) 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) 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) 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Char, Array (ZeroInt, 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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 CInt
infoPtr <- FortranIO
  (Char, Array (ZeroInt, 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
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) 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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CChar
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbsvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
afbPtr Ptr CInt
ldafbPtr Ptr CChar
equedPtr Ptr Double
sPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Char, Array (ZeroInt, ZeroInt) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int)
      IO
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Char
 -> Array (ZeroInt, ZeroInt) Double
 -> Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
     Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
     (Char
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Char
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Char
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CChar -> Char) -> IO CChar -> IO Char
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) Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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
x
         IO
  (Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbtf2.f>
pbtf2 ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IO (Int)
pbtf2 :: Char -> Int -> IOArray (ZeroInt, ZeroInt) Double -> IO Int
pbtf2 Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 CInt
-> Ptr CInt
-> IO ()
FFI.pbtf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbtrf.f>
pbtrf ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IO (Int)
pbtrf :: Char -> Int -> IOArray (ZeroInt, ZeroInt) Double -> IO Int
pbtrf Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
abPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 CInt
-> Ptr CInt
-> IO ()
FFI.pbtrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpbtrs.f>
pbtrs ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
pbtrs :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
pbtrs Char
uplo Int
kd Array (ZeroInt, ZeroInt) Double
ab IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
abPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbtrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpftrf.f>
pftrf ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ a -} ->
   IO (Int)
pftrf :: Char -> Char -> Int -> IOArray ZeroInt Double -> IO Int
pftrf Char
transr Char
uplo Int
n IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
aPtr <- 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
a
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
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 Double -> Ptr CInt -> IO ()
FFI.pftrf Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpftri.f>
pftri ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ a -} ->
   IO (Int)
pftri :: Char -> Char -> Int -> IOArray ZeroInt Double -> IO Int
pftri Char
transr Char
uplo Int
n IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
aPtr <- 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
a
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
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 Double -> Ptr CInt -> IO ()
FFI.pftri Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpftrs.f>
pftrs ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
pftrs :: Char
-> Char
-> Int
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
pftrs Char
transr Char
uplo Int
n Array ZeroInt Double
a IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array 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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- 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
a
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pftrs Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpocon.f>
pocon ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Double {- ^ anorm -} ->
   IO (Double, Int)
pocon :: Char
-> Array (ZeroInt, ZeroInt) Double -> Double -> IO (Double, Int)
pocon Char
uplo Array (ZeroInt, ZeroInt) 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) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Int) (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 (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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (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, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Int) IO ()
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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pocon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpoequ.f>
poequ ::
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double, Double, Double, Int)
poequ :: Array (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Double, Double, Int)
poequ Array (ZeroInt, ZeroInt) 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) 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 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Double, Double, Int) (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 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.poequ Ptr CInt
nPtr Ptr 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 (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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpoequb.f>
poequb ::
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double, Double, Double, Int)
poequb :: Array (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Double, Double, Int)
poequb Array (ZeroInt, ZeroInt) 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) 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 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Double, Double, Int) (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 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.poequb Ptr CInt
nPtr Ptr 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 (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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dporfs.f>
porfs ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ af -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
porfs :: Char
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
porfs Char
uplo Array (ZeroInt, ZeroInt) Double
a Array (ZeroInt, ZeroInt) Double
af Array (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt 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
aPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
afPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
bPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
xPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (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
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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.porfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
afPtr Ptr CInt
ldafPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dposv.f>
posv ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
posv :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
posv Char
uplo IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.posv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dposvx.f>
posvx ::
   Char {- ^ fact -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ af -} ->
   Char {- ^ equed -} ->
   IOArray ZeroInt Double {- ^ s -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Char, Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)
posvx :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Char
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
posvx Char
fact Char
uplo IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) Double
af Char
equed IOArray ZeroInt Double
s IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
  IO
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) 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) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
   IO
   (Char, Array (ZeroInt, ZeroInt) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
 -> IO
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
afPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
af
      Ptr CInt
ldafPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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) 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) 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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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) 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) 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) 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Char, Array (ZeroInt, 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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 CInt
infoPtr <- FortranIO
  (Char, Array (ZeroInt, 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
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) 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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CChar
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.posvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
afPtr Ptr CInt
ldafPtr Ptr CChar
equedPtr Ptr Double
sPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Char, Array (ZeroInt, ZeroInt) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int)
      IO
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Char
 -> Array (ZeroInt, ZeroInt) Double
 -> Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
     Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
     (Char
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Char
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Char
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CChar -> Char) -> IO CChar -> IO Char
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) Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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
x
         IO
  (Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpotf2.f>
potf2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Int)
potf2 :: Char -> IOArray (ZeroInt, ZeroInt) Double -> IO Int
potf2 Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 (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 CInt -> Ptr CInt -> IO ()
FFI.potf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpotrf.f>
potrf ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Int)
potrf :: Char -> IOArray (ZeroInt, ZeroInt) Double -> IO Int
potrf Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 (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 CInt -> Ptr CInt -> IO ()
FFI.potrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpotri.f>
potri ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Int)
potri :: Char -> IOArray (ZeroInt, ZeroInt) Double -> IO Int
potri Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 (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 CInt -> Ptr CInt -> IO ()
FFI.potri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpotrs.f>
potrs ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
potrs :: Char
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
potrs Char
uplo Array (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) 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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.potrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dppcon.f>
ppcon ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ ap -} ->
   Double {- ^ anorm -} ->
   IO (Double, Int)
ppcon :: Char -> Int -> Array ZeroInt Double -> Double -> IO (Double, Int)
ppcon Char
uplo Int
n Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
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 Double
apPtr <- 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
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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (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, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Int) IO ()
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 Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ppcon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dppequ.f>
ppequ ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ ap -} ->
   IO (Array ZeroInt Double, Double, Double, Int)
ppequ :: Char
-> Int
-> Array ZeroInt Double
-> IO (Array ZeroInt Double, Double, Double, Int)
ppequ Char
uplo Int
n Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double
apPtr <- Array ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Double, Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt 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 (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 Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ppequ Ptr CChar
uploPtr Ptr CInt
nPtr Ptr 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 (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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpprfs.f>
pprfs ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ ap -} ->
   Array ZeroInt Double {- ^ afp -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
pprfs :: Char
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
pprfs Char
uplo Int
n Array ZeroInt Double
ap Array ZeroInt Double
afp Array (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt 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
apPtr <- 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
ap
      Ptr Double
afpPtr <- 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
afp
      Ptr Double
bPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
xPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (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
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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pprfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
apPtr Ptr Double
afpPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dppsv.f>
ppsv ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
ppsv :: Char
-> Int
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
ppsv Char
uplo Int
n IOArray ZeroInt Double
ap IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
apPtr <- 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
ap
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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
-> IO ()
FFI.ppsv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
apPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dppsvx.f>
ppsvx ::
   Char {- ^ fact -} ->
   Char {- ^ uplo -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   IOArray ZeroInt Double {- ^ afp -} ->
   Char {- ^ equed -} ->
   IOArray ZeroInt Double {- ^ s -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Char, Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)
ppsvx :: Char
-> Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Char
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
ppsvx Char
fact Char
uplo IOArray ZeroInt Double
ap IOArray ZeroInt Double
afp Char
equed IOArray ZeroInt Double
s IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
  IO
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) 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) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
   IO
   (Char, Array (ZeroInt, ZeroInt) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
 -> IO
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Double
apPtr <- IOArray ZeroInt Double
-> FortranIO
     (Char, Array (ZeroInt, 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
ap
      Ptr Double
afpPtr <- IOArray ZeroInt Double
-> FortranIO
     (Char, Array (ZeroInt, 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
afp
      Ptr CChar
equedPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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) 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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Char, Array (ZeroInt, 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, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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) 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) 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) 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Char, Array (ZeroInt, 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) 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 CInt
infoPtr <- FortranIO
  (Char, Array (ZeroInt, 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
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) 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 Double
-> Ptr Double
-> Ptr CChar
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ppsvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
apPtr Ptr Double
afpPtr Ptr CChar
equedPtr Ptr Double
sPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Char, Array (ZeroInt, ZeroInt) Double, Double,
   Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Char, Array (ZeroInt, ZeroInt) Double, Double,
    Array ZeroInt Double, Array ZeroInt Double, Int)
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int)
      IO
      (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Char
 -> Array (ZeroInt, ZeroInt) Double
 -> Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
     Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO
     (Char
      -> Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Char
   -> Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Char
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CChar -> Char) -> IO CChar -> IO Char
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) Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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
x
         IO
  (Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Double
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> (Char, Array (ZeroInt, ZeroInt) Double, Double,
          Array ZeroInt Double, Array ZeroInt Double, Int))
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) Double, Double,
       Array ZeroInt Double, Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) Double, Double,
      Array ZeroInt Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpptrf.f>
pptrf ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   IO (Int)
pptrf :: Char -> Int -> IOArray ZeroInt Double -> IO Int
pptrf Char
uplo Int
n IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
apPtr <- 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
ap
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
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 CInt -> IO ()
FFI.pptrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpptri.f>
pptri ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   IO (Int)
pptri :: Char -> Int -> IOArray ZeroInt Double -> IO Int
pptri Char
uplo Int
n IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
apPtr <- 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
ap
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
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 CInt -> IO ()
FFI.pptri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpptrs.f>
pptrs ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ ap -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
pptrs :: Char
-> Int
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
pptrs Char
uplo Int
n Array ZeroInt Double
ap IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
apPtr <- 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
ap
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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
-> IO ()
FFI.pptrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
apPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpstf2.f>
pstf2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Double {- ^ tol -} ->
   IO (Array ZeroInt CInt, Int, Int)
pstf2 :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Double
-> IO (Array ZeroInt CInt, Int, Int)
pstf2 Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.pstf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr 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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpstrf.f>
pstrf ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Double {- ^ tol -} ->
   IO (Array ZeroInt CInt, Int, Int)
pstrf :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Double
-> IO (Array ZeroInt CInt, Int, Int)
pstrf Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.pstrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr 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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dptcon.f>
ptcon ::
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ e -} ->
   Double {- ^ anorm -} ->
   IO (Double, Int)
ptcon :: Array ZeroInt Double
-> Array ZeroInt Double -> Double -> IO (Double, Int)
ptcon Array ZeroInt Double
d Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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
work <- 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 Double
ePtr <- 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
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
workPtr <- 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
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 (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 Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ptcon Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpteqr.f>
pteqr ::
   Char {- ^ compz -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   IO (Int)
pteqr :: Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
pteqr Char
compz IOArray ZeroInt Double
d IOArray ZeroInt Double
e IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.pteqr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dptrfs.f>
ptrfs ::
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ e -} ->
   Array ZeroInt Double {- ^ df -} ->
   Array ZeroInt Double {- ^ ef -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
ptrfs :: Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
ptrfs Array ZeroInt Double
d Array ZeroInt Double
e Array ZeroInt Double
df Array ZeroInt Double
ef Array (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 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 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 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 Double
ePtr <- 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
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 Double
efPtr <- 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
ef
      Ptr Double
bPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
xPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
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 (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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ptrfs Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
dfPtr Ptr Double
efPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dptsv.f>
ptsv ::
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
ptsv :: IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
ptsv IOArray ZeroInt Double
d IOArray ZeroInt Double
e IOArray (ZeroInt, ZeroInt) 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 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ptsv Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dptsvx.f>
ptsvx ::
   Char {- ^ fact -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ e -} ->
   IOArray ZeroInt Double {- ^ df -} ->
   IOArray ZeroInt Double {- ^ ef -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)
ptsvx :: Char
-> Array ZeroInt Double
-> Array ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
ptsvx Char
fact Array ZeroInt Double
d Array ZeroInt Double
e IOArray ZeroInt Double
df IOArray ZeroInt Double
ef Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 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, ZeroInt) Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
-> IO
     (Array (ZeroInt, 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, ZeroInt) Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
-> IO
     (Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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 Double
ePtr <- Array ZeroInt Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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
e
      Ptr Double
dfPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, 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
df
      Ptr Double
efPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, 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
ef
      Ptr Double
bPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, 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, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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) 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) 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) 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, 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
work
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, 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, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) 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 Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ptsvx Ptr CChar
factPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
dfPtr Ptr Double
efPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
     Array ZeroInt Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
x
         IO
  (Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Double
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpttrf.f>
pttrf ::
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   IO (Int)
pttrf :: IOArray ZeroInt Double -> IOArray ZeroInt Double -> IO Int
pttrf IOArray ZeroInt Double
d IOArray ZeroInt 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 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
"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 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 CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
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 Double -> Ptr CInt -> IO ()
FFI.pttrf Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dpttrs.f>
pttrs ::
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
pttrs :: Array ZeroInt Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
pttrs Array ZeroInt Double
d Array ZeroInt Double
e IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 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 Double
ePtr <- 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
e
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pttrs Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dptts2.f>
ptts2 ::
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO ()
ptts2 :: Array ZeroInt Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO ()
ptts2 Array ZeroInt Double
d Array ZeroInt Double
e IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
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 Double
ePtr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
e
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      IO () -> ContT () IO ()
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 Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ptts2 Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
bPtr Ptr CInt
ldbPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/drscl.f>
rscl ::
   Int {- ^ n -} ->
   Double {- ^ sa -} ->
   IOArray ZeroInt Double {- ^ sx -} ->
   Int {- ^ incx -} ->
   IO ()
rscl :: Int -> Double -> IOArray ZeroInt Double -> Int -> IO ()
rscl Int
n Double
sa IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
sxPtr <- IOArray ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
sx
      Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      IO () -> ContT () IO ()
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 Double -> Ptr CInt -> IO ()
FFI.rscl Ptr CInt
nPtr Ptr Double
saPtr Ptr Double
sxPtr Ptr CInt
incxPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsgesv.f>
sgesv ::
   Int {- ^ n -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Array ZeroInt CInt, Array (ZeroInt,ZeroInt) Double, Int, Int)
sgesv :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
sgesv Int
n IOArray (ZeroInt, ZeroInt) Double
a Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
   IOArray (ZeroInt, ZeroInt) Double
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
n
   IOArray ZeroInt Float
swork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nrhs))
   ContT
  (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
  IO
  (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
-> IO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
   IO
   (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
 -> IO
      (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int))
-> ContT
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
     IO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
-> IO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) 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) Double, Int, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) 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) 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 Double
bPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
     (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 CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Double
workPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
work
      Ptr Float
sworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
swork
      Ptr CInt
iterPtr <- FortranIO
  (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) 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) Double, Int, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sgesv Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
workPtr Ptr Float
sworkPtr Ptr CInt
iterPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
-> ContT
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
     IO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
 -> ContT
      (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
      IO
      (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int))
-> IO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
-> ContT
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
     IO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt CInt
 -> Array (ZeroInt, ZeroInt) Double
 -> Int
 -> Int
 -> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int))
-> IO
     (Array ZeroInt CInt
      -> Array (ZeroInt, ZeroInt) Double
      -> Int
      -> Int
      -> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt CInt
   -> Array (ZeroInt, ZeroInt) Double
   -> Int
   -> Int
   -> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int
      -> Int
      -> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int))
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) Double
   -> Int
   -> Int
   -> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Int
      -> Int
      -> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int))
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
x
         IO
  (Int
   -> Int
   -> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int))
-> IO Int
-> IO
     (Int
      -> (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double, Int, Int))
-> IO Int
-> IO
     (Array ZeroInt CInt, Array (ZeroInt, ZeroInt) Double, Int, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspcon.f>
spcon ::
   Char {- ^ uplo -} ->
   Array ZeroInt Double {- ^ ap -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Double {- ^ anorm -} ->
   IO (Double, Int)
spcon :: Char
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Double
-> IO (Double, Int)
spcon Char
uplo Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
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 Double
apPtr <- 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
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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (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, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Int) IO ()
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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spcon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr CInt
ipivPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsposv.f>
sposv ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Int, Int)
sposv :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) Double, Int, Int)
sposv Char
uplo Int
n IOArray (ZeroInt, ZeroInt) Double
a Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
   IOArray (ZeroInt, ZeroInt) Double
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
n
   IOArray ZeroInt Float
swork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nrhs))
   ContT
  (Array (ZeroInt, ZeroInt) Double, Int, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Int, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Int, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Int, Int)
 -> IO (Array (ZeroInt, ZeroInt) Double, Int, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Int) (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) Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Double
workPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
work
      Ptr Float
sworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
swork
      Ptr CInt
iterPtr <- FortranIO (Array (ZeroInt, ZeroInt) Double, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Double, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sposv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
workPtr Ptr Float
sworkPtr Ptr CInt
iterPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Double, Int, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Int, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Int, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Int, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Int -> Int -> (Array (ZeroInt, ZeroInt) Double, Int, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int -> Int -> (Array (ZeroInt, ZeroInt) Double, Int, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int -> Int -> (Array (ZeroInt, ZeroInt) Double, Int, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO (Int -> Int -> (Array (ZeroInt, ZeroInt) Double, Int, Int))
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
x
         IO (Int -> Int -> (Array (ZeroInt, ZeroInt) Double, Int, Int))
-> IO Int
-> IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double, Int, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Double, Int, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsprfs.f>
sprfs ::
   Char {- ^ uplo -} ->
   Array ZeroInt Double {- ^ ap -} ->
   Array ZeroInt Double {- ^ afp -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
sprfs :: Char
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
sprfs Char
uplo Array ZeroInt Double
ap Array ZeroInt Double
afp Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt 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
apPtr <- 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
ap
      Ptr Double
afpPtr <- 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
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 Double
bPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
xPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sprfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
apPtr Ptr Double
afpPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspsv.f>
spsv ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Array ZeroInt CInt, Int)
spsv :: Char
-> Int
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt CInt, Int)
spsv Char
uplo Int
n IOArray ZeroInt Double
ap IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
apPtr <- 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
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 Double
bPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spsv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
apPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dspsvx.f>
spsvx ::
   Char {- ^ fact -} ->
   Char {- ^ uplo -} ->
   Array ZeroInt Double {- ^ ap -} ->
   IOArray ZeroInt Double {- ^ afp -} ->
   IOArray ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)
spsvx :: Char
-> Char
-> Array ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
spsvx Char
fact Char
uplo Array ZeroInt Double
ap IOArray ZeroInt Double
afp IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
-> IO
     (Array (ZeroInt, 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, ZeroInt) Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
-> IO
     (Array (ZeroInt, ZeroInt) 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) 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) 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) 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) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Double
apPtr <- Array ZeroInt Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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
ap
      Ptr Double
afpPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, 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
afp
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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 Double
bPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, 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, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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) 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) 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) 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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 CInt
infoPtr <- FortranIO
  (Array (ZeroInt, 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, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) 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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spsvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
apPtr Ptr Double
afpPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
     Array ZeroInt Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
x
         IO
  (Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Double
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsptrf.f>
sptrf ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   IO (Array ZeroInt CInt, Int)
sptrf :: Char
-> Int -> IOArray ZeroInt Double -> IO (Array ZeroInt CInt, Int)
sptrf Char
uplo Int
n IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
apPtr <- 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
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 (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 Double -> Ptr CInt -> Ptr CInt -> IO ()
FFI.sptrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr CInt
ipivPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsptri.f>
sptri ::
   Char {- ^ uplo -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IO (Int)
sptri :: Char -> IOArray ZeroInt Double -> Array ZeroInt CInt -> IO Int
sptri Char
uplo IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
work <- Int -> IO (IOArray ZeroInt 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 Double
apPtr <- 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
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 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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.sptri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr CInt
ipivPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsptrs.f>
sptrs ::
   Char {- ^ uplo -} ->
   Array ZeroInt Double {- ^ ap -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
sptrs :: Char
-> Array ZeroInt Double
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
sptrs Char
uplo Array ZeroInt Double
ap Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
apPtr <- 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
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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sptrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
apPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstebz.f>
stebz ::
   Char {- ^ range -} ->
   Char {- ^ order -} ->
   Double {- ^ vl -} ->
   Double {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Double {- ^ abstol -} ->
   Array ZeroInt Double {- ^ d -} ->
   Array ZeroInt Double {- ^ e -} ->
   IO (Int, Int, Array ZeroInt Double, Array ZeroInt CInt, Array ZeroInt CInt, Int)
stebz :: Char
-> Char
-> Double
-> Double
-> Int
-> Int
-> Double
-> Array ZeroInt Double
-> Array ZeroInt Double
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
stebz Char
range Char
order Double
vl Double
vu Int
il Int
iu Double
abstol Array ZeroInt Double
d Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
e
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"stebz: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
iblock <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
isplit <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
  IO
  (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
    Array ZeroInt CInt, Int)
   IO
   (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
    Array ZeroInt CInt, Int)
 -> IO
      (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
rangePtr <- Char
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
      Ptr CChar
orderPtr <- Char
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
order
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
vlPtr <- Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vl
      Ptr Double
vuPtr <- Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
vu
      Ptr CInt
ilPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
      Ptr CInt
iuPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
      Ptr Double
abstolPtr <- Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
abstol
      Ptr Double
dPtr <- Array ZeroInt Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      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
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      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 <- FortranIO
  (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
nsplitPtr <- FortranIO
  (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
   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, Int, Array ZeroInt Double, 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
w
      Ptr CInt
iblockPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iblock
      Ptr CInt
isplitPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isplit
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Int, Int, Array ZeroInt Double, 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO
  (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stebz Ptr CChar
rangePtr Ptr CChar
orderPtr Ptr CInt
nPtr Ptr Double
vlPtr Ptr Double
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Double
abstolPtr Ptr Double
dPtr Ptr Double
ePtr Ptr CInt
mPtr Ptr CInt
nsplitPtr Ptr Double
wPtr Ptr CInt
iblockPtr Ptr CInt
isplitPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
   Array ZeroInt CInt, Int)
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
    Array ZeroInt CInt, Int)
 -> ContT
      (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int)
      IO
      (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
-> ContT
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
     IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Int
 -> Array ZeroInt Double
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
     Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Int
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Int
   -> Int
   -> Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
nsplitPtr)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
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
   -> Int
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
iblock
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isplit
         IO
  (Int
   -> (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Int, Array ZeroInt Double, Array ZeroInt CInt,
      Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstedc.f>
stedc ::
   Char {- ^ compz -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Int)
stedc :: Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IO Int
stedc Char
compz IOArray ZeroInt Double
d IOArray ZeroInt Double
e IOArray (ZeroInt, ZeroInt) Double
z Int
lwork Int
liwork = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 (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 Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
liworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (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 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 Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstegr.f>
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 -} ->
   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) 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) 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) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
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 (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) Double,
   Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double,
    Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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) Double,
      Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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 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 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) Double,
   Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstein.f>
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 -} ->
   IO (Array (ZeroInt,ZeroInt) 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) 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) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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) Double, Array ZeroInt CInt, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
 -> IO (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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 Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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) 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) 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) 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) Double, Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int) IO ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) 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 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 Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Int
 -> (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
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
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int -> (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int))
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) Double, Array ZeroInt CInt, Int))
-> IO Int
-> IO (Array (ZeroInt, ZeroInt) Double, Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstemr.f>
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 -} ->
   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) 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) 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) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
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 (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) Double,
   Array ZeroInt CInt, Bool, Int)
  IO
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Bool, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double,
    Array ZeroInt CInt, Bool, Int)
   IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Bool, Int)
 -> IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Bool, Int))
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Bool, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Bool, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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 Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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) 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) 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) Double,
      Array ZeroInt CInt, Bool, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Bool, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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 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 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) Double,
   Array ZeroInt CInt, Bool, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Bool, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Bool, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Bool, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Bool, Int)
      IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Bool, Int))
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Bool, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Bool, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Bool, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Bool
 -> Int
 -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array ZeroInt CInt, Bool, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Bool
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Bool, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Bool
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Bool, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Bool
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Bool, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double
   -> Array ZeroInt CInt
   -> Bool
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Bool, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Bool
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Bool, Int))
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) Double
   -> Array ZeroInt CInt
   -> Bool
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Bool, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Bool
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Bool, Int))
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
z
         IO
  (Array ZeroInt CInt
   -> Bool
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Bool, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Bool
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Bool, Int))
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) Double,
       Array ZeroInt CInt, Bool, Int))
-> IO Bool
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Bool, Int))
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) Double,
       Array ZeroInt CInt, Bool, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Bool, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsteqr.f>
steqr ::
   Char {- ^ compz -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   IO (Int)
steqr :: Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
steqr Char
compz IOArray ZeroInt Double
d IOArray ZeroInt Double
e IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 (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 Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.steqr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsterf.f>
sterf ::
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   IO (Int)
sterf :: IOArray ZeroInt Double -> IOArray ZeroInt Double -> IO Int
sterf IOArray ZeroInt Double
d IOArray ZeroInt 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 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
"sterf: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr 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 CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
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 Double -> Ptr CInt -> IO ()
FFI.sterf Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstev.f>
stev ::
   Char {- ^ jobz -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   Int {- ^ ldz -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Int)
stev :: Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
stev Char
jobz IOArray ZeroInt Double
d IOArray ZeroInt Double
e Int
ldz = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt 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
"stev: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   IOArray (ZeroInt, ZeroInt) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2])
   ContT
  (Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) 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) 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) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
      Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.stev Ptr CChar
jobzPtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (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
z
         IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstevd.f>
stevd ::
   Char {- ^ jobz -} ->
   IOArray ZeroInt Double {- ^ d -} ->
   IOArray ZeroInt Double {- ^ e -} ->
   Int {- ^ ldz -} ->
   Int {- ^ workSize -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Int)
stevd :: Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Int
-> Int
-> Int
-> Int
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
stevd Char
jobz IOArray ZeroInt Double
d IOArray ZeroInt Double
e Int
ldz Int
workSize Int
lwork Int
liwork = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt 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
"stevd: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   IOArray (ZeroInt, ZeroInt) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
   ContT
  (Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) 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) 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) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array (ZeroInt, 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, 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, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stevd Ptr CChar
jobzPtr Ptr CInt
nPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (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
z
         IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstevr.f>
stevr ::
   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 -} ->
   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)
stevr :: 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) Double,
      Array ZeroInt CInt, Int)
stevr 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
"stevr: maximum[1,n-1] == eDim0" ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1] Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
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 (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] -> Int
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 (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
   ContT
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double,
    Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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) Double,
      Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stevr 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 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) Double,
   Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dstevx.f>
stevx ::
   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 -} ->
   IO (Int, Array ZeroInt Double, Array (ZeroInt,ZeroInt) Double, Array ZeroInt CInt, Int)
stevx :: Char
-> Char
-> IOArray ZeroInt Double
-> IOArray ZeroInt Double
-> Double
-> Double
-> Int
-> Int
-> Double
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
stevx 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 = 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
"stevx: maximum[1,n-1] == eDim0" ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1] Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   IOArray ZeroInt Double
w <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) Double
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,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
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) Double,
   Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) Double,
    Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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) 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) 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) Double,
      Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) 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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stevx 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 Double
zPtr Ptr CInt
ldzPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
   Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
    Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Double
 -> Array (ZeroInt, ZeroInt) Double
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
     Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Double
   -> Array (ZeroInt, ZeroInt) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Double
      -> Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
          Array ZeroInt CInt, Int))
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) Double,
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Double, Array (ZeroInt, ZeroInt) Double,
      Array ZeroInt CInt, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsycon.f>
sycon ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Double {- ^ anorm -} ->
   IO (Double, Int)
sycon :: Char
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> Double
-> IO (Double, Int)
sycon Char
uplo Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Int) (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 (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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (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, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Int) IO ()
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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sycon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
anormPtr Ptr Double
rcondPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyconv.f>
syconv ::
   Char {- ^ uplo -} ->
   Char {- ^ way -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IO (Array ZeroInt Double, Int)
syconv :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> IO (Array ZeroInt Double, Int)
syconv Char
uplo Char
way IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
e <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   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
uploPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
wayPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
way
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO (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 Double
ePtr <- 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
e
      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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.syconv Ptr CChar
uploPtr Ptr CChar
wayPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
ePtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyequb.f>
syequb ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double, Double, Double, Int)
syequb :: Char
-> Array (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Double, Double, Int)
syequb Char
uplo Array (ZeroInt, ZeroInt) 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) 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 Double
s <- 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
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Double, Double, Int) (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 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 Double
workPtr <- 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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.syequb Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
sPtr Ptr Double
scondPtr Ptr Double
amaxPtr Ptr 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 (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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyrfs.f>
syrfs ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ af -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ x -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
syrfs :: Char
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
syrfs Char
uplo Array (ZeroInt, ZeroInt) Double
a Array (ZeroInt, ZeroInt) Double
af Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt 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
aPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
afPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
bPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
xPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (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
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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.syrfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsysv.f>
sysv ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt CInt, Int)
sysv :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt CInt, Int)
sysv Char
uplo IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
bPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sysv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsysvx.f>
sysvx ::
   Char {- ^ fact -} ->
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ af -} ->
   IOArray ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Int {- ^ ldx -} ->
   Int {- ^ lwork -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Double, Array ZeroInt Double, Array ZeroInt Double, Int)
sysvx :: Char
-> Char
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
sysvx Char
fact Char
uplo Array (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) Double
af IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) 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 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) Double
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
-> IO
     (Array (ZeroInt, 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, ZeroInt) Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
-> IO
     (Array (ZeroInt, ZeroInt) 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) 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) 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) 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) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
afPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, 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, ZeroInt) Double
af
      Ptr CInt
ldafPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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) 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 Double
bPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
xPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array (ZeroInt, 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, ZeroInt) Double
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) 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) 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) 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) 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array (ZeroInt, 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt 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, ZeroInt) 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 CInt
infoPtr <- FortranIO
  (Array (ZeroInt, 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, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) 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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sysvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
rcondPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
   Array ZeroInt Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
    Array ZeroInt Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
     Array ZeroInt Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO
     (Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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
x
         IO
  (Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Double
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
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) Double, Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) Double, Double, Array ZeroInt Double,
      Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsyswapr.f>
syswapr ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ i1 -} ->
   Int {- ^ i2 -} ->
   IO ()
syswapr :: Char -> IOArray (ZeroInt, ZeroInt) Double -> Int -> Int -> IO ()
syswapr Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO () (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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.syswapr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
i1Ptr Ptr CInt
i2Ptr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytd2.f>
sytd2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)
sytd2 :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
sytd2 Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
tau <- 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)
   ContT
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int)
  IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int)
-> IO
     (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,
    Int)
   IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Int)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
-> IO
     (Array ZeroInt Double, 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, 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, Array ZeroInt Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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 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 Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
      Ptr Double
tauPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
tau
      Ptr CInt
infoPtr <- FortranIO
  (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,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.sytd2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
tauPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int)
      IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     (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
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (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, Int))
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 Double
   -> Int
   -> (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, Int))
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 Double
   -> Int
   -> (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, Int))
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
tau
         IO
  (Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytf2.f>
sytf2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt CInt, Int)
sytf2 :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt CInt, Int)
sytf2 Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr 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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytrd.f>
sytrd ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int)
sytrd :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
sytrd Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
tau <- 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int)
  IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int)
-> IO
     (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,
    Int)
   IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Int)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
-> IO
     (Array ZeroInt Double, 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, 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, Array ZeroInt Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (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, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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 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 Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
e
      Ptr Double
tauPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
tau
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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 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,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytrd Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
dPtr Ptr Double
ePtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int)
      IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
     IO
     (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
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> (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, Int))
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 Double
   -> Int
   -> (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, Int))
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 Double
   -> Int
   -> (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, Int))
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
tau
         IO
  (Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytrf.f>
sytrf ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt CInt, Int)
sytrf :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt CInt, Int)
sytrf Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytri.f>
sytri ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IO (Int)
sytri :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> IO Int
sytri Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 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 (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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.sytri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytri2.f>
sytri2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Int {- ^ nb -} ->
   Int {- ^ lwork -} ->
   IO (Int)
sytri2 :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> Int
-> Int
-> IO Int
sytri2 Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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
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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 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
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 (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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytri2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytri2x.f>
sytri2x ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Int {- ^ nb -} ->
   IO (Int)
sytri2x :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> Int
-> IO Int
sytri2x Char
uplo IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 Double
workPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytri2x Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
workPtr Ptr CInt
nbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytrs.f>
sytrs ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
sytrs :: Char
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
sytrs Char
uplo Array (ZeroInt, ZeroInt) Double
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsytrs2.f>
sytrs2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
sytrs2 :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
sytrs2 Char
uplo IOArray (ZeroInt, ZeroInt) Double
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      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 (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 CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.sytrs2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtbcon.f>
tbcon ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IO (Double, Int)
tbcon :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> IO (Double, Int)
tbcon Char
norm Char
uplo Char
diag Int
kd Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (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 Double
abPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (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, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Int) IO ()
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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tbcon Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
rcondPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtbrfs.f>
tbrfs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ x -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
tbrfs :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
tbrfs Char
uplo Char
trans Char
diag Int
kd Array (ZeroInt, ZeroInt) Double
ab Array (ZeroInt, ZeroInt) Double
b Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt 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 Double
abPtr <- Array (ZeroInt, 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, ZeroInt) 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
bPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
xPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tbrfs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr Double
abPtr Ptr CInt
ldabPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtbtrs.f>
tbtrs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
tbtrs :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
tbtrs Char
uplo Char
trans Char
diag Int
kd Array (ZeroInt, ZeroInt) Double
ab IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
abPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr 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 Double
abPtr Ptr CInt
ldabPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtfsm.f>
tfsm ::
   Char {- ^ transr -} ->
   Char {- ^ side -} ->
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Int {- ^ m -} ->
   Double {- ^ alpha -} ->
   Array ZeroInt Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO ()
tfsm :: Char
-> Char
-> Char
-> Char
-> Char
-> Int
-> Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO ()
tfsm Char
transr Char
side Char
uplo Char
trans Char
diag Int
m Double
alpha Array ZeroInt Double
a IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array 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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
b
   let _nt :: Int
_nt = Int
aDim0
   let n :: Int
n = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transrPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      Ptr CChar
sidePtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
uploPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
transPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
diagPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
alphaPtr <- Double -> FortranIO () (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
alpha
      Ptr Double
aPtr <- Array ZeroInt Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
a
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO () (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      IO () -> ContT () IO ()
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 Double
-> Ptr Double
-> Ptr 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 Double
alphaPtr Ptr Double
aPtr Ptr Double
bPtr Ptr CInt
ldbPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtftri.f>
tftri ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ a -} ->
   IO (Int)
tftri :: Char -> Char -> Char -> Int -> IOArray ZeroInt Double -> IO Int
tftri Char
transr Char
uplo Char
diag Int
n IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Double
a
   String -> Int -> IO ()
Call.ignore String
"tftri: 0:nt-1 == aDim0" 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 Double
aPtr <- 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
a
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
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 Double
-> Ptr CInt
-> IO ()
FFI.tftri Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtfttp.f>
tfttp ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ arf -} ->
   IO (Array ZeroInt Double, Int)
tfttp :: Char
-> Char
-> Int
-> Array ZeroInt Double
-> IO (Array ZeroInt Double, Int)
tfttp Char
transr Char
uplo Int
n Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double
ap <- 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
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 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
transrPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      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 Double
arfPtr <- Array ZeroInt Double
-> FortranIO (Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
arf
      Ptr Double
apPtr <- 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
ap
      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 (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 Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.tfttp Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
arfPtr Ptr Double
apPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
ap
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtfttr.f>
tfttr ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ arf -} ->
   Int {- ^ lda -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Int)
tfttr :: Char
-> Char
-> Int
-> Array ZeroInt Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
tfttr Char
transr Char
uplo Int
n Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double
a <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
lda
   ContT
  (Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transrPtr <- Char
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      Ptr CChar
uploPtr <- Char
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
arfPtr <- Array ZeroInt Double
-> FortranIO (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
arf
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tfttr Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
arfPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array (ZeroInt, ZeroInt) Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Double
a
         IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgevc.f>
tgevc ::
   Char {- ^ side -} ->
   Char {- ^ howmny -} ->
   Array ZeroInt Bool {- ^ select -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ s -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ p -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ vl -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ vr -} ->
   IO (Int, Int)
tgevc :: Char
-> Char
-> Array ZeroInt Bool
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Int, Int)
tgevc Char
side Char
howmny Array ZeroInt Bool
select Array (ZeroInt, ZeroInt) Double
s Array (ZeroInt, ZeroInt) Double
p IOArray (ZeroInt, ZeroInt) Double
vl IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
6Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int) IO (Int, Int) -> IO (Int, Int))
-> ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
howmnyPtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
howmny
      Ptr Bool
selectPtr <- Array ZeroInt Bool -> FortranIO (Int, Int) (Ptr Bool)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Bool
select
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
sPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
s
      Ptr CInt
ldsPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lds
      Ptr Double
pPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
p
      Ptr CInt
ldpPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldp
      Ptr Double
vlPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
vl
      Ptr CInt
ldvlPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
      Ptr Double
vrPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Int) IO ()
forall (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.tgevc Ptr CChar
sidePtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr Double
sPtr Ptr CInt
ldsPtr Ptr Double
pPtr Ptr CInt
ldpPtr Ptr Double
vlPtr Ptr CInt
ldvlPtr Ptr Double
vrPtr Ptr CInt
ldvrPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Int -> Int -> (Int, Int)) -> IO Int -> IO (Int -> (Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgex2.f>
tgex2 ::
   Bool {- ^ wantq -} ->
   Bool {- ^ wantz -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   Int {- ^ j1 -} ->
   Int {- ^ n1 -} ->
   Int {- ^ n2 -} ->
   Int {- ^ lwork -} ->
   IO (Int)
tgex2 :: Bool
-> Bool
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> Int
-> IO Int
tgex2 Bool
wantq Bool
wantz IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) Double
q IOArray (ZeroInt, ZeroInt) Double
z Int
j1 Int
n1 Int
n2 Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
wantqPtr <- Bool -> FortranIO Int (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantq
      Ptr Bool
wantzPtr <- Bool -> FortranIO Int (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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
n1Ptr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n1
      Ptr CInt
n2Ptr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n2
      Ptr 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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgex2 Ptr Bool
wantqPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr CInt
j1Ptr Ptr CInt
n1Ptr Ptr CInt
n2Ptr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgexc.f>
tgexc ::
   Bool {- ^ wantq -} ->
   Bool {- ^ wantz -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   Int {- ^ ifst -} ->
   Int {- ^ ilst -} ->
   Int {- ^ lwork -} ->
   IO (Int, Int, Int)
tgexc :: Bool
-> Bool
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> Int
-> IO (Int, Int, Int)
tgexc Bool
wantq Bool
wantz IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) Double
q IOArray (ZeroInt, ZeroInt) Double
z Int
ifst Int
ilst Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT (Int, Int, Int) IO (Int, Int, Int) -> IO (Int, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int, Int) IO (Int, Int, Int) -> IO (Int, Int, Int))
-> ContT (Int, Int, Int) IO (Int, Int, Int) -> IO (Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
wantqPtr <- Bool -> FortranIO (Int, Int, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantq
      Ptr Bool
wantzPtr <- Bool -> FortranIO (Int, Int, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr CInt
ifstPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ifst
      Ptr CInt
ilstPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilst
      Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO (Int, 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
lworkPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Int, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int, Int) IO ())
-> IO () -> ContT (Int, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgexc Ptr Bool
wantqPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr CInt
ifstPtr Ptr CInt
ilstPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Int, Int, Int) -> ContT (Int, Int, Int) IO (Int, Int, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int, Int) -> ContT (Int, Int, Int) IO (Int, Int, Int))
-> IO (Int, Int, Int) -> ContT (Int, Int, Int) IO (Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Int -> Int -> Int -> (Int, Int, Int))
-> IO (Int -> Int -> Int -> (Int, Int, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO (Int -> Int -> Int -> (Int, Int, Int))
-> IO Int -> IO (Int -> Int -> (Int, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ifstPtr)
         IO (Int -> Int -> (Int, Int, Int))
-> IO Int -> IO (Int -> (Int, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ilstPtr)
         IO (Int -> (Int, Int, Int)) -> IO Int -> IO (Int, Int, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgsen.f>
tgsen ::
   Int {- ^ ijob -} ->
   Bool {- ^ wantq -} ->
   Bool {- ^ wantz -} ->
   Array ZeroInt Bool {- ^ select -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ z -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double, Int)
tgsen :: Int
-> Bool
-> Bool
-> Array ZeroInt Bool
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
tgsen Int
ijob Bool
wantq Bool
wantz Array ZeroInt Bool
select IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) Double
q IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
alphar <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
alphai <- 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 Double
dif <- Int -> IO (IOArray ZeroInt Double)
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] -> Int
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 (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
   ContT
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int, Double, Double, Array ZeroInt Double, Int)
  IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int, Double, Double, Array ZeroInt Double, Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, 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,
    Int, Double, Double, Array ZeroInt Double, Int)
   IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Int, Double, Double, Array ZeroInt Double, Int)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int, Double, Double, Array ZeroInt Double, Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
ijobPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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 Double, Array ZeroInt Double, Array ZeroInt 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 Double, Array ZeroInt Double, Array ZeroInt 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 Double, Array ZeroInt Double, Array ZeroInt 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 Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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, ZeroInt) Double
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
alpharPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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
alphar
      Ptr Double
alphaiPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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
alphai
      Ptr Double
betaPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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
beta
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Double
zPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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, ZeroInt) Double
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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 Double, Array ZeroInt Double, Array ZeroInt 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 Double, Array ZeroInt Double, Array ZeroInt 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 Double, Array ZeroInt Double, Array ZeroInt 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 Double, Array ZeroInt Double, Array ZeroInt 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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 Double, Array ZeroInt Double, Array ZeroInt 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 Double, Array ZeroInt Double, Array ZeroInt 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 Double, Array ZeroInt Double, Array ZeroInt 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 Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int, Double, Double, Array ZeroInt Double, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt 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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr 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 Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
alpharPtr Ptr Double
alphaiPtr Ptr Double
betaPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr Double
zPtr Ptr CInt
ldzPtr Ptr CInt
mPtr Ptr Double
plPtr Ptr Double
prPtr Ptr Double
difPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
   Int, Double, Double, Array ZeroInt Double, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
    Int, Double, Double, Array ZeroInt Double, Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int, Double, Double, Array ZeroInt Double, Int)
      IO
      (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
       Int, Double, Double, Array ZeroInt Double, Int))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> Double
 -> Double
 -> Array ZeroInt Double
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt Double,
     Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
     Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
       Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
          Int))
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
alphar
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
       Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
          Int))
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
alphai
         IO
  (Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
       Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> Double
      -> Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
          Int))
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
   -> Double
   -> Double
   -> Array ZeroInt Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double,
       Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
       Int))
-> IO Int
-> IO
     (Double
      -> Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double, Array ZeroInt Double,
       Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
       Int))
-> IO Double
-> IO
     (Double
      -> Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
          Int))
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 Double, Array ZeroInt Double,
       Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
       Int))
-> IO Double
-> IO
     (Array ZeroInt Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
          Int))
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 Double, Array ZeroInt Double,
       Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
       Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> (Array ZeroInt Double, Array ZeroInt Double,
          Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
          Int))
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 Double, Array ZeroInt Double,
       Array ZeroInt Double, Int, Double, Double, Array ZeroInt Double,
       Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Array ZeroInt Double,
      Int, Double, Double, Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgsja.f>
tgsja ::
   Char {- ^ jobu -} ->
   Char {- ^ jobv -} ->
   Char {- ^ jobq -} ->
   Int {- ^ k -} ->
   Int {- ^ l -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Double {- ^ tola -} ->
   Double {- ^ tolb -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ u -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ v -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
tgsja :: Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Double
-> Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
tgsja Char
jobu Char
jobv Char
jobq Int
k Int
l IOArray (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) Double
b Double
tola Double
tolb IOArray (ZeroInt, ZeroInt) Double
u IOArray (ZeroInt, ZeroInt) Double
v IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 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 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 Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
bPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
uPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
vPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
qPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr 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 Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
tolaPtr Ptr Double
tolbPtr Ptr Double
alphaPtr Ptr Double
betaPtr Ptr Double
uPtr Ptr CInt
lduPtr Ptr Double
vPtr Ptr CInt
ldvPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgsna.f>
tgsna ::
   Char {- ^ job -} ->
   Char {- ^ howmny -} ->
   Array ZeroInt Bool {- ^ select -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ vl -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ vr -} ->
   Int {- ^ mm -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
tgsna :: Char
-> Char
-> Array ZeroInt Bool
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
tgsna Char
job Char
howmny Array ZeroInt Bool
select Array (ZeroInt, ZeroInt) Double
a Array (ZeroInt, ZeroInt) Double
b Array (ZeroInt, ZeroInt) Double
vl Array (ZeroInt, ZeroInt) 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) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6)
   ContT
  (Array ZeroInt 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Int) (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 Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Int) (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 Double, Array ZeroInt Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
vlPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 Double
vrPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 Double
workPtr <- 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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgsna Ptr CChar
jobPtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
vlPtr Ptr CInt
ldvlPtr Ptr Double
vrPtr Ptr CInt
ldvrPtr Ptr Double
sPtr Ptr Double
difPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgsy2.f>
tgsy2 ::
   Char {- ^ trans -} ->
   Int {- ^ ijob -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ d -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ f -} ->
   Double {- ^ rdsum -} ->
   Double {- ^ rdscal -} ->
   IO (Double, Double, Double, Int, Int)
tgsy2 :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Double
-> Double
-> IO (Double, Double, Double, Int, Int)
tgsy2 Char
trans Int
ijob Array (ZeroInt, ZeroInt) Double
a Array (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) Double
c Array (ZeroInt, ZeroInt) Double
d Array (ZeroInt, ZeroInt) Double
e IOArray (ZeroInt, ZeroInt) 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) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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)
   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, Double, Int, Int)
  IO
  (Double, Double, Double, Int, Int)
-> IO (Double, Double, Double, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Double, Double, Double, Int, Int)
   IO
   (Double, Double, Double, Int, Int)
 -> IO (Double, Double, Double, Int, Int))
-> ContT
     (Double, Double, Double, Int, Int)
     IO
     (Double, Double, Double, Int, Int)
-> IO (Double, Double, Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transPtr <- Char -> FortranIO (Double, Double, Double, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
ijobPtr <- Int -> FortranIO (Double, Double, Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
      Ptr CInt
mPtr <- Int -> FortranIO (Double, Double, Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Double, Double, Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Double, Int, Int) (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 (Double, Double, Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Double, Int, Int) (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 (Double, Double, Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO (Double, Double, Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr Double
dPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Double, Int, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
d
      Ptr CInt
lddPtr <- Int -> FortranIO (Double, Double, Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldd
      Ptr Double
ePtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Double, Int, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
e
      Ptr CInt
ldePtr <- Int -> FortranIO (Double, Double, Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lde
      Ptr Double
fPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Double, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
f
      Ptr CInt
ldfPtr <- Int -> FortranIO (Double, Double, Double, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldf
      Ptr Double
scalePtr <- FortranIO (Double, Double, Double, Int, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
rdsumPtr <- Double -> FortranIO (Double, Double, Double, Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rdsum
      Ptr Double
rdscalPtr <- Double -> FortranIO (Double, Double, Double, Int, Int) (Ptr Double)
forall r. Double -> FortranIO r (Ptr Double)
Call.double Double
rdscal
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Double, Double, 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
pqPtr <- FortranIO (Double, Double, Double, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO (Double, Double, Double, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Double, Double, Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Double, Double, Double, Int, Int) IO ())
-> IO () -> ContT (Double, Double, Double, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgsy2 Ptr CChar
transPtr Ptr CInt
ijobPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
dPtr Ptr CInt
lddPtr Ptr Double
ePtr Ptr CInt
ldePtr Ptr Double
fPtr Ptr CInt
ldfPtr Ptr Double
scalePtr Ptr Double
rdsumPtr Ptr Double
rdscalPtr Ptr CInt
iworkPtr Ptr CInt
pqPtr Ptr CInt
infoPtr
      IO (Double, Double, Double, Int, Int)
-> ContT
     (Double, Double, Double, Int, Int)
     IO
     (Double, Double, Double, Int, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Double, Double, Double, Int, Int)
 -> ContT
      (Double, Double, Double, Int, Int)
      IO
      (Double, Double, Double, Int, Int))
-> IO (Double, Double, Double, Int, Int)
-> ContT
     (Double, Double, Double, Int, Int)
     IO
     (Double, Double, Double, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Double
 -> Double
 -> Double
 -> Int
 -> Int
 -> (Double, Double, Double, Int, Int))
-> IO
     (Double
      -> Double
      -> Double
      -> Int
      -> Int
      -> (Double, Double, Double, Int, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Double
   -> Double
   -> Double
   -> Int
   -> Int
   -> (Double, Double, Double, Int, Int))
-> IO Double
-> IO
     (Double
      -> Double -> Int -> Int -> (Double, Double, Double, Int, Int))
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 -> Int -> (Double, Double, Double, Int, Int))
-> IO Double
-> IO (Double -> Int -> Int -> (Double, Double, Double, Int, Int))
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 -> Int -> (Double, Double, Double, Int, Int))
-> IO Double
-> IO (Int -> Int -> (Double, Double, Double, Int, Int))
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 -> Int -> (Double, Double, Double, Int, Int))
-> IO Int -> IO (Int -> (Double, Double, Double, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
pqPtr)
         IO (Int -> (Double, Double, Double, Int, Int))
-> IO Int -> IO (Double, Double, Double, Int, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtgsyl.f>
tgsyl ::
   Char {- ^ trans -} ->
   Int {- ^ ijob -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ d -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ f -} ->
   Int {- ^ lwork -} ->
   IO (Double, Double, Int)
tgsyl :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Double, Double, Int)
tgsyl Char
trans Int
ijob Array (ZeroInt, ZeroInt) Double
a Array (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) Double
c Array (ZeroInt, ZeroInt) Double
d Array (ZeroInt, ZeroInt) Double
e IOArray (ZeroInt, ZeroInt) 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) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6)
   ContT (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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Int) (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 (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Int) (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 (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr Double
dPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
d
      Ptr CInt
lddPtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldd
      Ptr Double
ePtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
e
      Ptr CInt
ldePtr <- Int -> FortranIO (Double, Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lde
      Ptr Double
fPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 Double
workPtr <- IOArray ZeroInt Double
-> FortranIO (Double, 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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgsyl Ptr CChar
transPtr Ptr CInt
ijobPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
dPtr Ptr CInt
lddPtr Ptr Double
ePtr Ptr CInt
ldePtr Ptr Double
fPtr Ptr CInt
ldfPtr Ptr Double
scalePtr Ptr Double
difPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Double, Double, Int)
-> ContT (Double, Double, Int) IO (Double, Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO (Double -> Double -> Int -> (Double, Double, Int))
-> IO Double -> IO (Double -> Int -> (Double, Double, Int))
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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtpcon.f>
tpcon ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ ap -} ->
   IO (Double, Int)
tpcon :: Char
-> Char -> Char -> Int -> Array ZeroInt Double -> IO (Double, Int)
tpcon Char
norm Char
uplo Char
diag Int
n Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
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 Double
apPtr <- 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
ap
      Ptr Double
rcondPtr <- FortranIO (Double, Int) (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (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, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Int) IO ()
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 Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tpcon Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
rcondPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtprfs.f>
tprfs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ ap -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ x -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
tprfs :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt Double
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
tprfs Char
uplo Char
trans Char
diag Int
n Array ZeroInt Double
ap Array (ZeroInt, ZeroInt) Double
b Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt 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 Double
apPtr <- 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
ap
      Ptr Double
bPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
xPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (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
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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tprfs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
apPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtptri.f>
tptri ::
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt Double {- ^ ap -} ->
   IO (Int)
tptri :: Char -> Char -> Int -> IOArray ZeroInt Double -> IO Int
tptri Char
uplo Char
diag Int
n IOArray ZeroInt 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 Double -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt 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 Double
apPtr <- 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
ap
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
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 Double -> Ptr CInt -> IO ()
FFI.tptri Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtptrs.f>
tptrs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ ap -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
tptrs :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
tptrs Char
uplo Char
trans Char
diag Int
n Array ZeroInt Double
ap IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
apPtr <- 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
ap
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tptrs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
apPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtpttf.f>
tpttf ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ ap -} ->
   IO (Array ZeroInt Double, Int)
tpttf :: Char
-> Char
-> Int
-> Array ZeroInt Double
-> IO (Array ZeroInt Double, Int)
tpttf Char
transr Char
uplo Int
n Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double
arf <- 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
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 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
transrPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      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 Double
apPtr <- Array ZeroInt Double
-> FortranIO (Array ZeroInt Double, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Double
ap
      Ptr Double
arfPtr <- 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
arf
      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 (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 Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.tpttf Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
arfPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
arf
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtpttr.f>
tpttr ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ ap -} ->
   Int {- ^ lda -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Int)
tpttr :: Char
-> Int
-> Array ZeroInt Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
tpttr Char
uplo Int
n Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double
a <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
lda
   ContT
  (Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
apPtr <- Array ZeroInt Double
-> FortranIO (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
ap
      Ptr Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tpttr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) Double
-> IO (Array (ZeroInt, ZeroInt) Double)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) Double
a
         IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrcon.f>
trcon ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Double, Int)
trcon :: Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) Double
-> IO (Double, Int)
trcon Char
norm Char
uplo Char
diag Array (ZeroInt, ZeroInt) 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) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Int) (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 (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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (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, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Double, Int) IO ()
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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trcon Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
rcondPtr Ptr Double
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrevc.f>
trevc ::
   Char {- ^ side -} ->
   Char {- ^ howmny -} ->
   IOArray ZeroInt Bool {- ^ select -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ t -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ vl -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ vr -} ->
   IO (Int, Int)
trevc :: Char
-> Char
-> IOArray ZeroInt Bool
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Int, Int)
trevc Char
side Char
howmny IOArray ZeroInt Bool
select Array (ZeroInt, ZeroInt) Double
t IOArray (ZeroInt, ZeroInt) Double
vl IOArray (ZeroInt, ZeroInt) 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
$ IOArray ZeroInt Bool -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Bool
select
   let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- 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 (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int) IO (Int, Int) -> IO (Int, Int))
-> ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
howmnyPtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
howmny
      Ptr Bool
selectPtr <- IOArray ZeroInt Bool -> FortranIO (Int, Int) (Ptr Bool)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Bool
select
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
tPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Double
t
      Ptr CInt
ldtPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr Double
vlPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
vl
      Ptr CInt
ldvlPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
      Ptr Double
vrPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Int) IO ()
forall (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.trevc Ptr CChar
sidePtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr Double
tPtr Ptr CInt
ldtPtr Ptr Double
vlPtr Ptr CInt
ldvlPtr Ptr Double
vrPtr Ptr CInt
ldvrPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Int, Int) -> ContT (Int, Int) IO (Int, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Int -> Int -> (Int, Int)) -> IO Int -> IO (Int -> (Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrexc.f>
trexc ::
   Char {- ^ compq -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ t -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   Int {- ^ ifst -} ->
   Int {- ^ ilst -} ->
   IO (Int, Int, Int)
trexc :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IO (Int, Int, Int)
trexc Char
compq IOArray (ZeroInt, ZeroInt) Double
t IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Int, Int, Int) IO (Int, Int, Int) -> IO (Int, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int, Int) IO (Int, Int, Int) -> IO (Int, Int, Int))
-> ContT (Int, Int, Int) IO (Int, Int, Int) -> IO (Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
compqPtr <- Char -> FortranIO (Int, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compq
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
tPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
t
      Ptr CInt
ldtPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Int, Int, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr CInt
ifstPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ifst
      Ptr CInt
ilstPtr <- Int -> FortranIO (Int, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilst
      Ptr Double
workPtr <- IOArray ZeroInt Double -> FortranIO (Int, 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 (Int, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int, Int) IO ())
-> IO () -> ContT (Int, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.trexc Ptr CChar
compqPtr Ptr CInt
nPtr Ptr Double
tPtr Ptr CInt
ldtPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr CInt
ifstPtr Ptr CInt
ilstPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Int, Int, Int) -> ContT (Int, Int, Int) IO (Int, Int, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int, Int) -> ContT (Int, Int, Int) IO (Int, Int, Int))
-> IO (Int, Int, Int) -> ContT (Int, Int, Int) IO (Int, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Int -> Int -> Int -> (Int, Int, Int))
-> IO (Int -> Int -> Int -> (Int, Int, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO (Int -> Int -> Int -> (Int, Int, Int))
-> IO Int -> IO (Int -> Int -> (Int, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ifstPtr)
         IO (Int -> Int -> (Int, Int, Int))
-> IO Int -> IO (Int -> (Int, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ilstPtr)
         IO (Int -> (Int, Int, Int)) -> IO Int -> IO (Int, Int, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrrfs.f>
trrfs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ x -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int)
trrfs :: Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int)
trrfs Char
uplo Char
trans Char
diag Array (ZeroInt, ZeroInt) Double
a Array (ZeroInt, ZeroInt) Double
b Array (ZeroInt, ZeroInt) 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) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double
work <- 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)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt 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 Double
aPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
bPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
xPtr <- Array (ZeroInt, 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, ZeroInt) 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 Double
workPtr <- 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
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trrfs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
xPtr Ptr CInt
ldxPtr Ptr Double
ferrPtr Ptr Double
berrPtr Ptr Double
workPtr Ptr CInt
iworkPtr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrsen.f>
trsen ::
   Char {- ^ job -} ->
   Char {- ^ compq -} ->
   Array ZeroInt Bool {- ^ select -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ t -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ q -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double, Int)
trsen :: Char
-> Char
-> Array ZeroInt Bool
-> IOArray (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
trsen Char
job Char
compq Array ZeroInt Bool
select IOArray (ZeroInt, ZeroInt) Double
t IOArray (ZeroInt, ZeroInt) Double
q Int
lwork Int
liwork = do
   let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Bool -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Bool
select
   let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
wr <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Double
wi <- 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] -> Int
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 (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
   ContT
  (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
  IO
  (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
    Int)
   IO
   (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
    Int)
 -> IO
      (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobPtr <- Char
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt 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 Double, Array ZeroInt 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 Double, Array ZeroInt 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 Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
tPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
t
      Ptr CInt
ldtPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Double
wrPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
wr
      Ptr Double
wiPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
wi
      Ptr CInt
mPtr <- FortranIO
  (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
sPtr <- FortranIO
  (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
sepPtr <- FortranIO
  (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
  (Ptr Double)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, 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
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      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, 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
liworkPtr <- Int
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trsen Ptr CChar
jobPtr Ptr CChar
compqPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr Double
tPtr Ptr CInt
ldtPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr Double
wrPtr Ptr Double
wiPtr Ptr CInt
mPtr Ptr Double
sPtr Ptr Double
sepPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
   Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
    Int)
 -> ContT
      (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int)
      IO
      (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
       Int))
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
-> ContT
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
     IO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Double
 -> Array ZeroInt Double
 -> Int
 -> Double
 -> Double
 -> Int
 -> (Array ZeroInt Double, Array ZeroInt Double, Int, Double,
     Double, Int))
-> IO
     (Array ZeroInt Double
      -> Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double, Int, Double,
          Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Array ZeroInt Double
   -> Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double, Int, Double,
       Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Array ZeroInt Double
      -> Int
      -> Double
      -> Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double, Int, Double,
          Double, Int))
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
wr
         IO
  (Array ZeroInt Double
   -> Int
   -> Double
   -> Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double, Int, Double,
       Double, Int))
-> IO (Array ZeroInt Double)
-> IO
     (Int
      -> Double
      -> Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double, Int, Double,
          Double, Int))
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
wi
         IO
  (Int
   -> Double
   -> Double
   -> Int
   -> (Array ZeroInt Double, Array ZeroInt Double, Int, Double,
       Double, Int))
-> IO Int
-> IO
     (Double
      -> Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double, Int, Double,
          Double, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 Double, Array ZeroInt Double, Int, Double,
       Double, Int))
-> IO Double
-> IO
     (Double
      -> Int
      -> (Array ZeroInt Double, Array ZeroInt Double, Int, Double,
          Double, Int))
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 Double, Array ZeroInt Double, Int, Double,
       Double, Int))
-> IO Double
-> IO
     (Int
      -> (Array ZeroInt Double, Array ZeroInt Double, Int, Double,
          Double, Int))
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 Double, Array ZeroInt Double, Int, Double,
       Double, Int))
-> IO Int
-> IO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Double, Double,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrsna.f>
trsna ::
   Char {- ^ job -} ->
   Char {- ^ howmny -} ->
   Array ZeroInt Bool {- ^ select -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ t -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ vl -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ vr -} ->
   Int {- ^ mm -} ->
   Int {- ^ ldwork -} ->
   IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
trsna :: Char
-> Char
-> Array ZeroInt Bool
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> Int
-> IO (Array ZeroInt Double, Array ZeroInt Double, Int, Int)
trsna Char
job Char
howmny Array ZeroInt Bool
select Array (ZeroInt, ZeroInt) Double
t Array (ZeroInt, ZeroInt) Double
vl Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) 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 CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1))
   ContT
  (Array ZeroInt 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 Double
tPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 Double
vlPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 Double
vrPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO
     (Array ZeroInt Double, Array ZeroInt Double, Int, Int) (Ptr Double)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) 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 Double
workPtr <- IOArray (ZeroInt, 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, ZeroInt) 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 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trsna Ptr CChar
jobPtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr Double
tPtr Ptr CInt
ldtPtr Ptr Double
vlPtr Ptr CInt
ldvlPtr Ptr Double
vrPtr Ptr CInt
ldvrPtr Ptr Double
sPtr Ptr Double
sepPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr Double
workPtr Ptr CInt
ldworkPtr 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 (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 (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 (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 (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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall 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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrsyl.f>
trsyl ::
   Char {- ^ trana -} ->
   Char {- ^ tranb -} ->
   Int {- ^ isgn -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   IO (Double, Int)
trsyl :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO (Double, Int)
trsyl Char
trana Char
tranb Int
isgn Array (ZeroInt, ZeroInt) Double
a Array (ZeroInt, ZeroInt) Double
b IOArray (ZeroInt, ZeroInt) 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) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Int) (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 (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Int) (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 (Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr 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 Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
scalePtr Ptr CInt
infoPtr
      IO (Double, Int) -> ContT (Double, Int) IO (Double, Int)
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 (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Double -> Int -> (Double, Int))
-> IO Double -> IO (Int -> (Double, Int))
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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrti2.f>
trti2 ::
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Int)
trti2 :: Char -> Char -> IOArray (ZeroInt, ZeroInt) Double -> IO Int
trti2 Char
uplo Char
diag IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trti2 Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrtri.f>
trtri ::
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Int)
trtri :: Char -> Char -> IOArray (ZeroInt, ZeroInt) Double -> IO Int
trtri Char
uplo Char
diag IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO 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 (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 Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trtri Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrtrs.f>
trtrs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ b -} ->
   IO (Int)
trtrs :: Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) Double
-> IOArray (ZeroInt, ZeroInt) Double
-> IO Int
trtrs Char
uplo Char
trans Char
diag Array (ZeroInt, ZeroInt) Double
a IOArray (ZeroInt, ZeroInt) 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) 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
$ IOArray (ZeroInt, ZeroInt) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
bPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) 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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trtrs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
bPtr Ptr CInt
ldbPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrttf.f>
trttf ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ nt -} ->
   IO (Array ZeroInt Double, Int)
trttf :: Char
-> Char
-> Array (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Int)
trttf Char
transr Char
uplo Array (ZeroInt, ZeroInt) Double
a Int
nt = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) 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 Double
arf <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nt
   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
transrPtr <- Char -> FortranIO (Array ZeroInt Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Array ZeroInt Double, Int) (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 Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
arfPtr <- 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
arf
      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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.trttf Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
arfPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
arf
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtrttp.f>
trttp ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   IO (Array ZeroInt Double, Int)
trttp :: Char
-> Array (ZeroInt, ZeroInt) Double
-> IO (Array ZeroInt Double, Int)
trttp Char
uplo Array (ZeroInt, ZeroInt) 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) 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 Double
ap <- 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
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 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
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double
-> FortranIO (Array ZeroInt Double, Int) (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 Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
apPtr <- 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
ap
      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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.trttp Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
apPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
ap
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dtzrzf.f>
tzrzf ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Double, Int)
tzrzf :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO (Array ZeroInt Double, Int)
tzrzf Int
m IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) Double
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Double
tau <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   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
mPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
aPtr <- IOArray (ZeroInt, 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, ZeroInt) 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
tauPtr <- 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
tau
      Ptr Double
workPtr <- 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
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      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 (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 CInt
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tzrzf Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Double, Int)
-> ContT (Array ZeroInt Double, Int) IO (Array ZeroInt Double, Int)
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 (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 (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
tau
         IO (Int -> (Array ZeroInt Double, Int))
-> IO Int -> IO (Array ZeroInt Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorg2l.f>
org2l ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IO (Int)
org2l :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IO Int
org2l Int
m IOArray (ZeroInt, ZeroInt) Double
a Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.org2l Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorg2r.f>
org2r ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IO (Int)
org2r :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IO Int
org2r Int
m IOArray (ZeroInt, ZeroInt) Double
a Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.org2r Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgbr.f>
orgbr ::
   Char {- ^ vect -} ->
   Int {- ^ m -} ->
   Int {- ^ k -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   Int {- ^ lwork -} ->
   IO (Int)
orgbr :: Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Int
-> IO Int
orgbr Char
vect Int
m Int
k IOArray (ZeroInt, ZeroInt) Double
a Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let _tauSize :: Int
_tauSize = Int
tauDim0
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orgbr Ptr CChar
vectPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorghr.f>
orghr ::
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   Int {- ^ lwork -} ->
   IO (Int)
orghr :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Int
-> IO Int
orghr Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) Double
a Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"orghr: n-1 == tauDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orghr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgl2.f>
orgl2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IO (Int)
orgl2 :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IO Int
orgl2 Int
m IOArray (ZeroInt, ZeroInt) Double
a Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.orgl2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorglq.f>
orglq ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   Int {- ^ lwork -} ->
   IO (Int)
orglq :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Int
-> IO Int
orglq Int
m IOArray (ZeroInt, ZeroInt) Double
a Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orglq Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgql.f>
orgql ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   Int {- ^ lwork -} ->
   IO (Int)
orgql :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Int
-> IO Int
orgql Int
m IOArray (ZeroInt, ZeroInt) Double
a Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orgql Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgqr.f>
orgqr ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   Int {- ^ lwork -} ->
   IO (Int)
orgqr :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Int
-> IO Int
orgqr Int
m IOArray (ZeroInt, ZeroInt) Double
a Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orgqr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgr2.f>
orgr2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IO (Int)
orgr2 :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IO Int
orgr2 Int
m IOArray (ZeroInt, ZeroInt) Double
a Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt 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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.orgr2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgrq.f>
orgrq ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   Int {- ^ lwork -} ->
   IO (Int)
orgrq :: Int
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Int
-> IO Int
orgrq Int
m IOArray (ZeroInt, ZeroInt) Double
a Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orgrq Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgtr.f>
orgtr ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   Int {- ^ lwork -} ->
   IO (Int)
orgtr :: Char
-> IOArray (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> Int
-> IO Int
orgtr Char
uplo IOArray (ZeroInt, ZeroInt) Double
a Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"orgtr: n-1 == tauDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      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
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 (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 CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.orgtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorm2l.f>
orm2l ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO (Int)
orm2l :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
orm2l Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Double
a Array ZeroInt Double
tau IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
"orm2l: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.orm2l Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorm2r.f>
orm2r ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO (Int)
orm2r :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
orm2r Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Double
a Array ZeroInt Double
tau IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
"orm2r: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.orm2r Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormbr.f>
ormbr ::
   Char {- ^ vect -} ->
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Int {- ^ k -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
ormbr :: Char
-> Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
ormbr Char
vect Char
side Char
trans Int
m Int
k Array (ZeroInt, ZeroInt) Double
a Array ZeroInt Double
tau IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
"ormbr: minimum[nq,k] == tauDim0" Int
tauDim0
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormbr Ptr CChar
vectPtr Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormhr.f>
ormhr ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
ormhr :: Char
-> Char
-> Int
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
ormhr Char
side Char
trans Int
m Int
ilo Int
ihi Array (ZeroInt, ZeroInt) Double
a Array ZeroInt Double
tau IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormhr Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorml2.f>
orml2 ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO (Int)
orml2 :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
orml2 Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Double
a Array ZeroInt Double
tau IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.orml2 Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormlq.f>
ormlq ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
ormlq :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
ormlq Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Double
a Array ZeroInt Double
tau IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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
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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormlq Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormql.f>
ormql ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
ormql :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
ormql Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Double
a Array ZeroInt Double
tau IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
"ormql: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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
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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormql Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormqr.f>
ormqr ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
ormqr :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
ormqr Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Double
a Array ZeroInt Double
tau IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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
"ormqr: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
   IOArray ZeroInt Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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
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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormqr Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormr2.f>
ormr2 ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO (Int)
ormr2 :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
ormr2 Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Double
a Array ZeroInt Double
tau IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ormr2 Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormr3.f>
ormr3 ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Int {- ^ l -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO (Int)
ormr3 :: Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
ormr3 Char
side Char
trans Int
m Int
l Array (ZeroInt, ZeroInt) Double
a Array ZeroInt Double
tau IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt 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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.ormr3 Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
lPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormrq.f>
ormrq ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
ormrq :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
ormrq Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) Double
a Array ZeroInt Double
tau IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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
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 (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 Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormrq Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormrz.f>
ormrz ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Int {- ^ l -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
ormrz :: Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
ormrz Char
side Char
trans Int
m Int
l Array (ZeroInt, ZeroInt) Double
a Array ZeroInt Double
tau IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormrz Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
lPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dormtr.f>
ormtr ::
   Char {- ^ side -} ->
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Double {- ^ a -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
ormtr :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
ormtr Char
side Char
uplo Char
trans Int
m Array (ZeroInt, ZeroInt) Double
a Array ZeroInt Double
tau IOArray (ZeroInt, ZeroInt) 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) Double -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt Double)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
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 Double
aPtr <- Array (ZeroInt, ZeroInt) Double -> FortranIO Int (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 Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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
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 (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 Double
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ormtr Ptr CChar
sidePtr Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
aPtr Ptr CInt
ldaPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dopgtr.f>
opgtr ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt Double {- ^ ap -} ->
   Array ZeroInt Double {- ^ tau -} ->
   Int {- ^ ldq -} ->
   IO (Array (ZeroInt,ZeroInt) Double, Int)
opgtr :: Char
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> Int
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
opgtr Char
uplo Int
n Array ZeroInt Double
ap Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Double
tau
   String -> Bool -> IO ()
Call.assert String
"opgtr: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"opgtr: n-1 == tauDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
   IOArray (ZeroInt, ZeroInt) Double
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Double)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq
   IOArray ZeroInt Double
work <- 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)
   ContT
  (Array (ZeroInt, ZeroInt) Double, Int)
  IO
  (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) Double, Int)
   IO
   (Array (ZeroInt, ZeroInt) Double, Int)
 -> IO (Array (ZeroInt, ZeroInt) Double, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Double
apPtr <- Array ZeroInt Double
-> FortranIO (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
ap
      Ptr Double
tauPtr <- Array ZeroInt Double
-> FortranIO (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
tau
      Ptr Double
qPtr <- IOArray (ZeroInt, ZeroInt) Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
q
      Ptr CInt
ldqPtr <- Int -> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Double
workPtr <- IOArray ZeroInt Double
-> FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Double
work
      Ptr CInt
infoPtr <- FortranIO (Array (ZeroInt, ZeroInt) Double, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) Double, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.opgtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
tauPtr Ptr Double
qPtr Ptr CInt
ldqPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) Double, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) Double, Int)
      IO
      (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) Double, Int)
     IO
     (Array (ZeroInt, ZeroInt) Double, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) Double
 -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO
     (Array (ZeroInt, ZeroInt) Double
      -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) Double
   -> Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO (Array (ZeroInt, ZeroInt) Double)
-> IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
forall (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
q
         IO (Int -> (Array (ZeroInt, ZeroInt) Double, Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) Double, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dopmtr.f>
opmtr ::
   Char {- ^ side -} ->
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array ZeroInt Double {- ^ ap -} ->
   Array ZeroInt Double {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) Double {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO (Int)
opmtr :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt Double
-> Array ZeroInt Double
-> IOArray (ZeroInt, ZeroInt) Double
-> Int
-> IO Int
opmtr Char
side Char
uplo Char
trans Int
m Array ZeroInt Double
ap Array ZeroInt Double
tau IOArray (ZeroInt, ZeroInt) 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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 Double -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt 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) Double -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) 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 Double
work <- Int -> IO (IOArray ZeroInt 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 Double
apPtr <- 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
ap
      Ptr Double
tauPtr <- 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
tau
      Ptr Double
cPtr <- IOArray (ZeroInt, ZeroInt) Double -> FortranIO Int (Ptr Double)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Double
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      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 (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 Double
-> Ptr Double
-> Ptr Double
-> Ptr CInt
-> Ptr Double
-> Ptr CInt
-> IO ()
FFI.opmtr Ptr CChar
sidePtr Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Double
apPtr Ptr Double
tauPtr Ptr Double
cPtr Ptr CInt
ldcPtr Ptr Double
workPtr Ptr CInt
infoPtr
      IO Int -> ContT Int IO Int
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 (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)