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

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

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

import Data.Complex (Complex)

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

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


-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cbbcsd.f>
bbcsd ::
   Char {- ^ jobu1 -} ->
   Char {- ^ jobu2 -} ->
   Char {- ^ jobv1t -} ->
   Char {- ^ jobv2t -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   IOArray ZeroInt Float {- ^ theta -} ->
   IOArray ZeroInt Float {- ^ phi -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ u1 -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ u2 -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ v1t -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ v2t -} ->
   Int {- ^ lrwork -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float, Int)
bbcsd :: Char
-> Char
-> Char
-> Char
-> Char
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
bbcsd Char
jobu1 Char
jobu2 Char
jobv1t Char
jobv2t Char
trans Int
m IOArray ZeroInt Float
theta IOArray ZeroInt Float
phi IOArray (ZeroInt, ZeroInt) (Complex Float)
u1 IOArray (ZeroInt, ZeroInt) (Complex Float)
u2 IOArray (ZeroInt, ZeroInt) (Complex Float)
v1t IOArray (ZeroInt, ZeroInt) (Complex Float)
v2t Int
lrwork = do
   let thetaDim0 :: Int
thetaDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
theta
   let phiDim0 :: Int
phiDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
phi
   let (Int
u1Dim0,Int
u1Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
u1
   let (Int
u2Dim0,Int
u2Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
u2
   let (Int
v1tDim0,Int
v1tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
v1t
   let (Int
v2tDim0,Int
v2tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
v2t
   let q :: Int
q = Int
thetaDim0
   let p :: Int
p = Int
u1Dim0
   let ldu1 :: Int
ldu1 = Int
u1Dim1
   let ldu2 :: Int
ldu2 = Int
u2Dim1
   let ldv1t :: Int
ldv1t = Int
v1tDim1
   let ldv2t :: Int
ldv2t = Int
v2tDim1
   String -> Bool -> IO ()
Call.assert String
"bbcsd: q-1 == phiDim0" (Int
qInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
phiDim0)
   String -> Bool -> IO ()
Call.assert String
"bbcsd: m-p == u2Dim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
p Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
u2Dim0)
   String -> Bool -> IO ()
Call.assert String
"bbcsd: q == v1tDim0" (Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
v1tDim0)
   String -> Bool -> IO ()
Call.assert String
"bbcsd: m-q == v2tDim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
v2tDim0)
   IOArray ZeroInt Float
b11d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
   IOArray ZeroInt Float
b11e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
qInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt Float
b12d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
   IOArray ZeroInt Float
b12e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
qInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt Float
b21d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
   IOArray ZeroInt Float
b21e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
qInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt Float
b22d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
   IOArray ZeroInt Float
b22e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
qInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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
lrwork])
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO
      (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobu1Ptr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu1
      Ptr CChar
jobu2Ptr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu2
      Ptr CChar
jobv1tPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv1t
      Ptr CChar
jobv2tPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv2t
      Ptr CChar
transPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
pPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
      Ptr CInt
qPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
q
      Ptr Float
thetaPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
theta
      Ptr Float
phiPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
phi
      Ptr (Complex Float)
u1Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
u1
      Ptr CInt
ldu1Ptr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu1
      Ptr (Complex Float)
u2Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
u2
      Ptr CInt
ldu2Ptr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu2
      Ptr (Complex Float)
v1tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
v1t
      Ptr CInt
ldv1tPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv1t
      Ptr (Complex Float)
v2tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
v2t
      Ptr CInt
ldv2tPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv2t
      Ptr Float
b11dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b11d
      Ptr Float
b11ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b11e
      Ptr Float
b12dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b12d
      Ptr Float
b12ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b12e
      Ptr Float
b21dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b21d
      Ptr Float
b21ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b21e
      Ptr Float
b22dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b22d
      Ptr Float
b22ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
b22e
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
lrworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.bbcsd Ptr CChar
jobu1Ptr Ptr CChar
jobu2Ptr Ptr CChar
jobv1tPtr Ptr CChar
jobv2tPtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
qPtr Ptr Float
thetaPtr Ptr Float
phiPtr Ptr (Complex Float)
u1Ptr Ptr CInt
ldu1Ptr Ptr (Complex Float)
u2Ptr Ptr CInt
ldu2Ptr Ptr (Complex Float)
v1tPtr Ptr CInt
ldv1tPtr Ptr (Complex Float)
v2tPtr Ptr CInt
ldv2tPtr Ptr Float
b11dPtr Ptr Float
b11ePtr Ptr Float
b12dPtr Ptr Float
b12ePtr Ptr Float
b21dPtr Ptr Float
b21ePtr Ptr Float
b22dPtr Ptr Float
b22ePtr Ptr Float
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
     Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
     Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b11d
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b11e
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b12d
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b12e
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b21d
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b21e
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b22d
         IO
  (Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
b22e
         IO
  (Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cbdsqr.f>
bdsqr ::
   Char {- ^ uplo -} ->
   Int {- ^ nru -} ->
   IOArray ZeroInt Float {- ^ d -} ->
   IOArray ZeroInt Float {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ vt -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ u -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   IO (Int)
bdsqr :: Char
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
bdsqr Char
uplo Int
nru IOArray ZeroInt Float
d IOArray ZeroInt Float
e IOArray (ZeroInt, ZeroInt) (Complex Float)
vt IOArray (ZeroInt, ZeroInt) (Complex Float)
u IOArray (ZeroInt, ZeroInt) (Complex Float)
c = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
   let (Int
vtDim0,Int
vtDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
vt
   let (Int
uDim0,Int
uDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
u
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let n :: Int
n = Int
dDim0
   let ncvt :: Int
ncvt = Int
vtDim0
   let ldvt :: Int
ldvt = Int
vtDim1
   let ldu :: Int
ldu = Int
uDim1
   let ncc :: Int
ncc = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   String -> Bool -> IO ()
Call.assert String
"bdsqr: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"bdsqr: n == uDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
uDim0)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
ncvtPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ncvt
      Ptr CInt
nruPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nru
      Ptr CInt
nccPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ncc
      Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
vtPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vt
      Ptr CInt
ldvtPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
      Ptr (Complex Float)
uPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
u
      Ptr CInt
lduPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      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 Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.bdsqr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
ncvtPtr Ptr CInt
nruPtr Ptr CInt
nccPtr Ptr Float
dPtr Ptr Float
ePtr Ptr (Complex Float)
vtPtr Ptr CInt
ldvtPtr Ptr (Complex Float)
uPtr Ptr CInt
lduPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr Float
rworkPtr 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/cgbbrd.f>
gbbrd ::
   Char {- ^ vect -} ->
   Int {- ^ m -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Int {- ^ ldq -} ->
   Int {- ^ ldpt -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)
gbbrd :: Char
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
gbbrd Char
vect Int
m Int
kl Int
ku IOArray (ZeroInt, ZeroInt) (Complex Float)
ab Int
ldq Int
ldpt IOArray (ZeroInt, ZeroInt) (Complex Float)
c = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let ncc :: Int
ncc = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n]Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
m Int
ldq
   IOArray (ZeroInt, ZeroInt) (Complex Float)
pt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldpt
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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])
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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 Float, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
vectPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
vect
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nccPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ncc
      Ptr CInt
klPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
      Ptr CInt
kuPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr (Complex Float)
ptPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
pt
      Ptr CInt
ldptPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldpt
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gbbrd Ptr CChar
vectPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nccPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
dPtr Ptr Float
ePtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr (Complex Float)
ptPtr Ptr CInt
ldptPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float,
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
         IO
  (Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
pt
         IO
  (Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex 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/cgbcon.f>
gbcon ::
   Char {- ^ norm -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Float {- ^ anorm -} ->
   IO (Float, Int)
gbcon :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> Float
-> IO (Float, Int)
gbcon Char
norm Int
kl Int
ku Array (ZeroInt, ZeroInt) (Complex Float)
ab Array ZeroInt CInt
ipiv Float
anorm = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   String -> Bool -> IO ()
Call.assert String
"gbcon: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
klPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
      Ptr CInt
kuPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
      Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gbcon Ptr CChar
normPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbequ.f>
gbequ ::
   Int {- ^ m -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)
gbequ :: Int
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
gbequ Int
m Int
kl Int
ku Array (ZeroInt, ZeroInt) (Complex Float)
ab = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray ZeroInt Float
r <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   IOArray ZeroInt Float
c <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
    Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
    Int)
 -> IO
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
klPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
      Ptr CInt
kuPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
rPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
r
      Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
      Ptr Float
rowcndPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
colcndPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
amaxPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gbequ Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
rPtr Ptr Float
cPtr Ptr Float
rowcndPtr Ptr Float
colcndPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
    Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Float
 -> Float
 -> Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
     Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
r
         IO
  (Array ZeroInt Float
   -> Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
c
         IO
  (Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Float
-> IO
     (Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rowcndPtr
         IO
  (Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Float
-> IO
     (Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
colcndPtr
         IO
  (Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Float
-> IO
     (Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
         IO
  (Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbequb.f>
gbequb ::
   Int {- ^ m -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)
gbequb :: Int
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
gbequb Int
m Int
kl Int
ku Array (ZeroInt, ZeroInt) (Complex Float)
ab = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray ZeroInt Float
r <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   IOArray ZeroInt Float
c <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
    Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
    Int)
 -> IO
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
klPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
      Ptr CInt
kuPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
rPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
r
      Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
      Ptr Float
rowcndPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
colcndPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
amaxPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gbequb Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
rPtr Ptr Float
cPtr Ptr Float
rowcndPtr Ptr Float
colcndPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
    Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Float
 -> Float
 -> Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
     Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
r
         IO
  (Array ZeroInt Float
   -> Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
c
         IO
  (Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Float
-> IO
     (Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rowcndPtr
         IO
  (Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Float
-> IO
     (Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
colcndPtr
         IO
  (Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Float
-> IO
     (Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
         IO
  (Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbrfs.f>
gbrfs ::
   Char {- ^ trans -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ afb -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
gbrfs :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
gbrfs Char
trans Int
kl Int
ku Array (ZeroInt, ZeroInt) (Complex Float)
ab Array (ZeroInt, ZeroInt) (Complex Float)
afb Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
x = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
afbDim0,Int
afbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
afb
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let ldafb :: Int
ldafb = Int
afbDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"gbrfs: n == afbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afbDim0)
   String -> Bool -> IO ()
Call.assert String
"gbrfs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   String -> Bool -> IO ()
Call.assert String
"gbrfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
klPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
      Ptr CInt
kuPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr (Complex Float)
afbPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
afb
      Ptr CInt
ldafbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldafb
      Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gbrfs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr (Complex Float)
afbPtr Ptr CInt
ldafbPtr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgbsv.f>
gbsv ::
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Array ZeroInt CInt, Int)
gbsv :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt CInt, Int)
gbsv Int
kl Int
ku IOArray (ZeroInt, ZeroInt) (Complex Float)
ab IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
klPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
      Ptr CInt
kuPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
      Ptr CInt
nrhsPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbsv Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/cgbsvx.f>
gbsvx ::
   Char {- ^ fact -} ->
   Char {- ^ trans -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ afb -} ->
   IOArray ZeroInt CInt {- ^ ipiv -} ->
   Char {- ^ equed -} ->
   IOArray ZeroInt Float {- ^ r -} ->
   IOArray ZeroInt Float {- ^ c -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Char, Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)
gbsvx :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt CInt
-> Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
gbsvx Char
fact Char
trans Int
kl Int
ku IOArray (ZeroInt, ZeroInt) (Complex Float)
ab IOArray (ZeroInt, ZeroInt) (Complex Float)
afb IOArray ZeroInt CInt
ipiv Char
equed IOArray ZeroInt Float
r IOArray ZeroInt Float
c IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
ldx = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
afbDim0,Int
afbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
afb
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
ipiv
   let rDim0 :: Int
rDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
r
   let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
c
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let ldafb :: Int
ldafb = Int
afbDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"gbsvx: n == afbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afbDim0)
   String -> Bool -> IO ()
Call.assert String
"gbsvx: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   String -> Bool -> IO ()
Call.assert String
"gbsvx: n == rDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
rDim0)
   String -> Bool -> IO ()
Call.assert String
"gbsvx: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
factPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
      Ptr CChar
transPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
klPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
      Ptr CInt
kuPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr (Complex Float)
afbPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
afb
      Ptr CInt
ldafbPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldafb
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr CChar
equedPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
      Ptr Float
rPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
r
      Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
rcondPtr <- FortranIO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CChar
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gbsvx Ptr CChar
factPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr (Complex Float)
afbPtr Ptr CInt
ldafbPtr Ptr CInt
ipivPtr Ptr CChar
equedPtr Ptr Float
rPtr Ptr Float
cPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Char
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
     Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Char
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Char
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Char
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, 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) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
         IO
  (Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO
  (Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array 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/cgbtf2.f>
gbtf2 ::
   Int {- ^ m -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IO (Array ZeroInt CInt, Int)
gbtf2 :: Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt CInt, Int)
gbtf2 Int
m Int
kl Int
ku IOArray (ZeroInt, ZeroInt) (Complex Float)
ab = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
klPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
      Ptr CInt
kuPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbtf2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall (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/cgbtrf.f>
gbtrf ::
   Int {- ^ m -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IO (Array ZeroInt CInt, Int)
gbtrf :: Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt CInt, Int)
gbtrf Int
m Int
kl Int
ku IOArray (ZeroInt, ZeroInt) (Complex Float)
ab = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
klPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
      Ptr CInt
kuPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbtrf Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall (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/cgbtrs.f>
gbtrs ::
   Char {- ^ trans -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
gbtrs :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
gbtrs Char
trans Int
kl Int
ku Array (ZeroInt, ZeroInt) (Complex Float)
ab Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"gbtrs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
klPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
      Ptr CInt
kuPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gbtrs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/cgebak.f>
gebak ::
   Char {- ^ job -} ->
   Char {- ^ side -} ->
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   Array ZeroInt Float {- ^ scale -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ v -} ->
   IO (Int)
gebak :: Char
-> Char
-> Int
-> Int
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
gebak Char
job Char
side Int
ilo Int
ihi Array ZeroInt Float
scale IOArray (ZeroInt, ZeroInt) (Complex Float)
v = do
   let scaleDim0 :: Int
scaleDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
scale
   let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
v
   let n :: Int
n = Int
scaleDim0
   let m :: Int
m = Int
vDim0
   let ldv :: Int
ldv = Int
vDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
      Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iloPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr Float
scalePtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
scale
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr (Complex Float)
vPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
v
      Ptr CInt
ldvPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gebak Ptr CChar
jobPtr Ptr CChar
sidePtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
scalePtr Ptr CInt
mPtr Ptr (Complex Float)
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/cgebal.f>
gebal ::
   Char {- ^ job -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Int, Int, Array ZeroInt Float, Int)
gebal :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Int, Int, Array ZeroInt Float, Int)
gebal Char
job IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
scale <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Int, Array ZeroInt Float, Int)
  IO
  (Int, Int, Array ZeroInt Float, Int)
-> IO (Int, Int, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Int, Array ZeroInt Float, Int)
   IO
   (Int, Int, Array ZeroInt Float, Int)
 -> IO (Int, Int, Array ZeroInt Float, Int))
-> ContT
     (Int, Int, Array ZeroInt Float, Int)
     IO
     (Int, Int, Array ZeroInt Float, Int)
-> IO (Int, Int, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobPtr <- Char -> FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
iloPtr <- FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
ihiPtr <- FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
scalePtr <- IOArray ZeroInt Float
-> FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
scale
      Ptr CInt
infoPtr <- FortranIO (Int, Int, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Int, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int, Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Int, Int, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gebal Ptr CChar
jobPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
scalePtr Ptr CInt
infoPtr
      IO (Int, Int, Array ZeroInt Float, Int)
-> ContT
     (Int, Int, Array ZeroInt Float, Int)
     IO
     (Int, Int, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int, Array ZeroInt Float, Int)
 -> ContT
      (Int, Int, Array ZeroInt Float, Int)
      IO
      (Int, Int, Array ZeroInt Float, Int))
-> IO (Int, Int, Array ZeroInt Float, Int)
-> ContT
     (Int, Int, Array ZeroInt Float, Int)
     IO
     (Int, Int, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Int
 -> Array ZeroInt Float
 -> Int
 -> (Int, Int, Array ZeroInt Float, Int))
-> IO
     (Int
      -> Int
      -> Array ZeroInt Float
      -> Int
      -> (Int, Int, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Int
   -> Int
   -> Array ZeroInt Float
   -> Int
   -> (Int, Int, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Int
      -> Array ZeroInt Float
      -> Int
      -> (Int, Int, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
iloPtr)
         IO
  (Int
   -> Array ZeroInt Float
   -> Int
   -> (Int, Int, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array ZeroInt Float
      -> Int -> (Int, Int, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ihiPtr)
         IO
  (Array ZeroInt Float
   -> Int -> (Int, Int, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Int, Int, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
scale
         IO (Int -> (Int, Int, Array ZeroInt Float, Int))
-> IO Int -> IO (Int, Int, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgebd2.f>
gebd2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
gebd2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
gebd2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n]Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt (Complex Float)
tauq <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
taup <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
 -> IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
tauqPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tauq
      Ptr (Complex Float)
taupPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
taup
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.gebd2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
dPtr Ptr Float
ePtr Ptr (Complex Float)
tauqPtr Ptr (Complex Float)
taupPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float,
     Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
         IO
  (Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tauq
         IO
  (Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
taup
         IO
  (Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex 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/cgebrd.f>
gebrd ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
gebrd :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
gebrd Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n]Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt (Complex Float)
tauq <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
taup <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
 -> IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
tauqPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tauq
      Ptr (Complex Float)
taupPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
taup
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gebrd Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
dPtr Ptr Float
ePtr Ptr (Complex Float)
tauqPtr Ptr (Complex Float)
taupPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float,
     Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
         IO
  (Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tauq
         IO
  (Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
taup
         IO
  (Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex 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/cgecon.f>
gecon ::
   Char {- ^ norm -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Float {- ^ anorm -} ->
   IO (Float, Int)
gecon :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> IO (Float, Int)
gecon Char
norm Array (ZeroInt, ZeroInt) (Complex Float)
a Float
anorm = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
      Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gecon Ptr CChar
normPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeequ.f>
geequ ::
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)
geequ :: Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
geequ Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
r <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   IOArray ZeroInt Float
c <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
    Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
    Int)
 -> IO
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
rPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
r
      Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
      Ptr Float
rowcndPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
colcndPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
amaxPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.geequ Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
rPtr Ptr Float
cPtr Ptr Float
rowcndPtr Ptr Float
colcndPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
    Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Float
 -> Float
 -> Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
     Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
r
         IO
  (Array ZeroInt Float
   -> Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
c
         IO
  (Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Float
-> IO
     (Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rowcndPtr
         IO
  (Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Float
-> IO
     (Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
colcndPtr
         IO
  (Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Float
-> IO
     (Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
         IO
  (Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgeequb.f>
geequb ::
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float, Int)
geequb :: Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
geequb Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
r <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   IOArray ZeroInt Float
c <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
    Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
    Int)
 -> IO
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
rPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
r
      Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
      Ptr Float
rowcndPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
colcndPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
amaxPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.geequb Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
rPtr Ptr Float
cPtr Ptr Float
rowcndPtr Ptr Float
colcndPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
   Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
    Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Float
 -> Float
 -> Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
     Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
r
         IO
  (Array ZeroInt Float
   -> Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
c
         IO
  (Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Float
-> IO
     (Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rowcndPtr
         IO
  (Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Float
-> IO
     (Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
colcndPtr
         IO
  (Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Float
-> IO
     (Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
         IO
  (Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
       Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float, Float, Float, Float,
      Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgees.f>
gees ::
   Char {- ^ jobvs -} ->
   Char {- ^ sort -} ->
   FunPtr (Ptr (Complex Float) -> IO Bool) {- ^ select -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ ldvs -} ->
   Int {- ^ lwork -} ->
   IO (Int, Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)
gees :: Char
-> Char
-> FunPtr (Ptr (Complex Float) -> IO Bool)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
gees Char
jobvs Char
sort FunPtr (Ptr (Complex Float) -> IO Bool)
select IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
ldvs Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
w <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vs <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Bool
bwork <- Int -> IO (IOArray ZeroInt Bool)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Int, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO
      (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobvsPtr <- Char
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvs
      Ptr CChar
sortPtr <- Char
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
      FunPtr (Ptr (Complex Float) -> IO Bool)
selectPtr <- FunPtr (Ptr (Complex Float) -> IO Bool)
-> ContT
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (FunPtr (Ptr (Complex Float) -> IO Bool))
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr (Complex Float) -> IO Bool)
select
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
sdimPtr <- FortranIO
  (Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
wPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
w
      Ptr (Complex Float)
vsPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vs
      Ptr CInt
ldvsPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvs
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Bool)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Bool
bwork
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr (Complex Float) -> IO Bool)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.gees Ptr CChar
jobvsPtr Ptr CChar
sortPtr FunPtr (Ptr (Complex Float) -> IO Bool)
selectPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
sdimPtr Ptr (Complex Float)
wPtr Ptr (Complex Float)
vsPtr Ptr CInt
ldvsPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Int, Array ZeroInt (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Int
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Int
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex 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
sdimPtr)
         IO
  (Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vs
         IO
  (Int
   -> (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int
-> IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex 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/cgeesx.f>
geesx ::
   Char {- ^ jobvs -} ->
   Char {- ^ sort -} ->
   FunPtr (Ptr (Complex Float) -> IO Bool) {- ^ select -} ->
   Char {- ^ sense -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ ldvs -} ->
   Int {- ^ lwork -} ->
   IO (Int, Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Float, Float, Int)
geesx :: Char
-> Char
-> FunPtr (Ptr (Complex Float) -> IO Bool)
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
geesx Char
jobvs Char
sort FunPtr (Ptr (Complex Float) -> IO Bool)
select Char
sense IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
ldvs Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
w <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vs <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Bool
bwork <- Int -> IO (IOArray ZeroInt Bool)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
  IO
  (Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
-> IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
   IO
   (Int, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
 -> IO
      (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int))
-> ContT
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
-> IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobvsPtr <- Char
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvs
      Ptr CChar
sortPtr <- Char
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
      FunPtr (Ptr (Complex Float) -> IO Bool)
selectPtr <- FunPtr (Ptr (Complex Float) -> IO Bool)
-> ContT
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     IO
     (FunPtr (Ptr (Complex Float) -> IO Bool))
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr (Complex Float) -> IO Bool)
select
      Ptr CChar
sensePtr <- Char
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sense
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
sdimPtr <- FortranIO
  (Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
wPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
w
      Ptr (Complex Float)
vsPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vs
      Ptr CInt
ldvsPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvs
      Ptr Float
rcondePtr <- FortranIO
  (Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
rcondvPtr <- FortranIO
  (Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     (Ptr Bool)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Bool
bwork
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr (Complex Float) -> IO Bool)
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.geesx Ptr CChar
jobvsPtr Ptr CChar
sortPtr FunPtr (Ptr (Complex Float) -> IO Bool)
selectPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
sdimPtr Ptr (Complex Float)
wPtr Ptr (Complex Float)
vsPtr Ptr CInt
ldvsPtr Ptr Float
rcondePtr Ptr Float
rcondvPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
-> ContT
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
 -> ContT
      (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
      IO
      (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int))
-> IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
-> ContT
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
     IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Float
 -> Float
 -> Int
 -> (Int, Array ZeroInt (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int))
-> IO
     (Int
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Float
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Int
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Float
   -> Float
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Float
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Float, 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
sdimPtr)
         IO
  (Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Float
   -> Float
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Float
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Float
   -> Float
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Float
      -> Float
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vs
         IO
  (Float
   -> Float
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int))
-> IO Float
-> IO
     (Float
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondePtr
         IO
  (Float
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int))
-> IO Float
-> IO
     (Int
      -> (Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondvPtr
         IO
  (Int
   -> (Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Float, Float, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Float, 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/cgeev.f>
geev ::
   Char {- ^ jobvl -} ->
   Char {- ^ jobvr -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ ldvl -} ->
   Int {- ^ ldvr -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)
geev :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
geev Char
jobvl Char
jobvr IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
ldvl Int
ldvr Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
w <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvr
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO
      (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobvlPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvl
      Ptr CChar
jobvrPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvr
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
wPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
w
      Ptr (Complex Float)
vlPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vl
      Ptr CInt
ldvlPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
      Ptr (Complex Float)
vrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vr
      Ptr CInt
ldvrPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.geev Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
wPtr Ptr (Complex Float)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Float)
vrPtr Ptr CInt
ldvrPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Array ZeroInt (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vl
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vr
         IO
  (Int
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex 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/cgeevx.f>
geevx ::
   Char {- ^ balanc -} ->
   Char {- ^ jobvl -} ->
   Char {- ^ jobvr -} ->
   Char {- ^ sense -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ ldvl -} ->
   Int {- ^ ldvr -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int, Int, Array ZeroInt Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)
geevx :: Char
-> Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
geevx Char
balanc Char
jobvl Char
jobvr Char
sense IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
ldvl Int
ldvr Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
w <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvr
   IOArray ZeroInt Float
scale <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
rconde <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
rcondv <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Float, Array ZeroInt Float,
   Array ZeroInt Float, Int)
  IO
  (Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Float, Array ZeroInt Float,
   Array ZeroInt Float, Int)
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
    Array ZeroInt Float, Float, Array ZeroInt Float,
    Array ZeroInt Float, Int)
   IO
   (Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
    Array ZeroInt Float, Float, Array ZeroInt Float,
    Array ZeroInt Float, Int)
 -> IO
      (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Float, Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
balancPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
balanc
      Ptr CChar
jobvlPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvl
      Ptr CChar
jobvrPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvr
      Ptr CChar
sensePtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sense
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
wPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
w
      Ptr (Complex Float)
vlPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vl
      Ptr CInt
ldvlPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
      Ptr (Complex Float)
vrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vr
      Ptr CInt
ldvrPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
      Ptr CInt
iloPtr <- FortranIO
  (Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Float, Array ZeroInt Float,
   Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
ihiPtr <- FortranIO
  (Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Float, Array ZeroInt Float,
   Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
scalePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
scale
      Ptr Float
abnrmPtr <- FortranIO
  (Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Float, Array ZeroInt Float,
   Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
rcondePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rconde
      Ptr Float
rcondvPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rcondv
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Float, Array ZeroInt Float,
   Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Float, Array ZeroInt Float,
       Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.geevx Ptr CChar
balancPtr Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
wPtr Ptr (Complex Float)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Float)
vrPtr Ptr CInt
ldvrPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
scalePtr Ptr Float
abnrmPtr Ptr Float
rcondePtr Ptr Float
rcondvPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Float, Array ZeroInt Float,
   Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
    Array ZeroInt Float, Float, Array ZeroInt Float,
    Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Float, Array ZeroInt Float,
       Array ZeroInt Float, Int)
      IO
      (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Float, Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
     IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> Int
 -> Array ZeroInt Float
 -> Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
     Array ZeroInt Float, Float, Array ZeroInt Float,
     Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> Int
      -> Array ZeroInt Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Float, Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,)
         IO
  (Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> Int
   -> Array ZeroInt Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Float, Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> Int
      -> Array ZeroInt Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Float, Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> Int
   -> Array ZeroInt Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Float, Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> Int
      -> Array ZeroInt Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Float, Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vl
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> Int
   -> Array ZeroInt Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Float, Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> Int
      -> Array ZeroInt Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Float, Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vr
         IO
  (Int
   -> Int
   -> Array ZeroInt Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Float, Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Int
      -> Array ZeroInt Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Float, Array ZeroInt Float,
          Array 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
iloPtr)
         IO
  (Int
   -> Array ZeroInt Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Float, Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array ZeroInt Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Float, Array ZeroInt Float,
          Array 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
ihiPtr)
         IO
  (Array ZeroInt Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Float, Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Float, Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
scale
         IO
  (Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Float, Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Float, Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
abnrmPtr
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Float, Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Float, Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rconde
         IO
  (Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Float, Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Float, Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rcondv
         IO
  (Int
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Float, Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Float, Array ZeroInt Float,
      Array 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/cgehd2.f>
gehd2 ::
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt (Complex Float), Int)
gehd2 :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt (Complex Float), Int)
gehd2 Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.gehd2 Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cgehrd.f>
gehrd ::
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Int)
gehrd :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt (Complex Float), Int)
gehrd Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gehrd Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cgelq2.f>
gelq2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt (Complex Float), Int)
gelq2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt (Complex Float), Int)
gelq2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.gelq2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cgelqf.f>
gelqf ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Int)
gelqf :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt (Complex Float), Int)
gelqf Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gelqf Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cgels.f>
gels ::
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ lwork -} ->
   IO (Int)
gels :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
gels Char
trans Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gels Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
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/cgelsd.f>
gelsd ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Float {- ^ rcond -} ->
   Int {- ^ lwork -} ->
   Int {- ^ lrwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Float, Int, Int)
gelsd :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Float, Int, Int)
gelsd Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Float
rcond Int
lwork Int
lrwork Int
liwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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
lrwork])
   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 Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
 -> IO (Array ZeroInt Float, Int, Int))
-> ContT
     (Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr Float
rcondPtr <- Float -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rcond
      Ptr CInt
rankPtr <- FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Float, Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gelsd Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr Float
sPtr Ptr Float
rcondPtr Ptr CInt
rankPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Int, Int)
-> ContT
     (Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int, Int)
 -> ContT
      (Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float, Int, Int)
-> ContT
     (Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Int -> Int -> (Array ZeroInt Float, Int, Int))
-> IO
     (Array ZeroInt Float
      -> Int -> Int -> (Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Int -> Int -> (Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> Int -> (Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
         IO (Int -> Int -> (Array ZeroInt Float, Int, Int))
-> IO Int -> IO (Int -> (Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
rankPtr)
         IO (Int -> (Array ZeroInt Float, Int, Int))
-> IO Int -> IO (Array ZeroInt Float, Int, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgelss.f>
gelss ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Float {- ^ rcond -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Float, Int, Int)
gelss :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> Int
-> IO (Array ZeroInt Float, Int, Int)
gelss Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Float
rcond Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*[Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   ContT
  (Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
 -> IO (Array ZeroInt Float, Int, Int))
-> ContT
     (Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr Float
rcondPtr <- Float -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rcond
      Ptr CInt
rankPtr <- FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Float, Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gelss Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr Float
sPtr Ptr Float
rcondPtr Ptr CInt
rankPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Int, Int)
-> ContT
     (Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int, Int)
 -> ContT
      (Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float, Int, Int)
-> ContT
     (Array ZeroInt Float, Int, Int) IO (Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Int -> Int -> (Array ZeroInt Float, Int, Int))
-> IO
     (Array ZeroInt Float
      -> Int -> Int -> (Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Int -> Int -> (Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> Int -> (Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
         IO (Int -> Int -> (Array ZeroInt Float, Int, Int))
-> IO Int -> IO (Int -> (Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
rankPtr)
         IO (Int -> (Array ZeroInt Float, Int, Int))
-> IO Int -> IO (Array ZeroInt Float, Int, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgelsy.f>
gelsy ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray ZeroInt CInt {- ^ jpvt -} ->
   Float {- ^ rcond -} ->
   Int {- ^ lwork -} ->
   IO (Int, Int)
gelsy :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt CInt
-> Float
-> Int
-> IO (Int, Int)
gelsy Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b IOArray ZeroInt CInt
jpvt Float
rcond Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let jpvtDim0 :: Int
jpvtDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
jpvt
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"gelsy: n == jpvtDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
jpvtDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int) IO (Int, Int) -> IO (Int, Int))
-> ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
jpvtPtr <- IOArray ZeroInt CInt -> FortranIO (Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpvt
      Ptr Float
rcondPtr <- Float -> FortranIO (Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rcond
      Ptr CInt
rankPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int) IO ())
-> IO () -> ContT (Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gelsy Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr CInt
jpvtPtr Ptr Float
rcondPtr Ptr CInt
rankPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr 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/cgeql2.f>
geql2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt (Complex Float), Int)
geql2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt (Complex Float), Int)
geql2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.geql2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cgeqlf.f>
geqlf ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Int)
geqlf :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt (Complex Float), Int)
geqlf Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geqlf Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cgeqp3.f>
geqp3 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray ZeroInt CInt {- ^ jpvt -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Int)
geqp3 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt CInt
-> Int
-> IO (Array ZeroInt (Complex Float), Int)
geqp3 Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray ZeroInt CInt
jpvt Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let jpvtDim0 :: Int
jpvtDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
jpvt
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"geqp3: n == jpvtDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
jpvtDim0)
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
jpvtPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpvt
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.geqp3 Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
jpvtPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cgeqr2.f>
geqr2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt (Complex Float), Int)
geqr2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt (Complex Float), Int)
geqr2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.geqr2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cgeqr2p.f>
geqr2p ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt (Complex Float), Int)
geqr2p :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt (Complex Float), Int)
geqr2p Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.geqr2p Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cgeqrf.f>
geqrf ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Int)
geqrf :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt (Complex Float), Int)
geqrf Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geqrf Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cgeqrfp.f>
geqrfp ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Int)
geqrfp :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt (Complex Float), Int)
geqrfp Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.geqrfp Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cgerfs.f>
gerfs ::
   Char {- ^ trans -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
gerfs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
gerfs Char
trans Array (ZeroInt, ZeroInt) (Complex Float)
a Array (ZeroInt, ZeroInt) (Complex Float)
af Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
x = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
afDim0,Int
afDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
af
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldaf :: Int
ldaf = Int
afDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"gerfs: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
   String -> Bool -> IO ()
Call.assert String
"gerfs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   String -> Bool -> IO ()
Call.assert String
"gerfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
afPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
af
      Ptr CInt
ldafPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
      Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gerfs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgerq2.f>
gerq2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt (Complex Float), Int)
gerq2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt (Complex Float), Int)
gerq2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.gerq2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cgerqf.f>
gerqf ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Int)
gerqf :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt (Complex Float), Int)
gerqf Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gerqf Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cgesc2.f>
gesc2 ::
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray ZeroInt (Complex Float) {- ^ rhs -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array ZeroInt CInt {- ^ jpiv -} ->
   IO (Float)
gesc2 :: Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> IO Float
gesc2 Array (ZeroInt, ZeroInt) (Complex Float)
a IOArray ZeroInt (Complex Float)
rhs Array ZeroInt CInt
ipiv Array ZeroInt CInt
jpiv = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let rhsDim0 :: Int
rhsDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
rhs
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let jpivDim0 :: Int
jpivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
jpiv
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let _rhsSize :: Int
_rhsSize = Int
rhsDim0
   String -> Bool -> IO ()
Call.assert String
"gesc2: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   String -> Bool -> IO ()
Call.assert String
"gesc2: n == jpivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
jpivDim0)
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
rhsPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
rhs
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Float (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr CInt
jpivPtr <- Array ZeroInt CInt -> FortranIO Float (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
jpiv
      Ptr Float
scalePtr <- FortranIO Float (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Float IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Float IO ()) -> IO () -> ContT Float IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> IO ()
FFI.gesc2 Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
rhsPtr Ptr CInt
ipivPtr Ptr CInt
jpivPtr Ptr Float
scalePtr
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgesdd.f>
gesdd ::
   Char {- ^ jobz -} ->
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ ucol -} ->
   Int {- ^ ldu -} ->
   Int {- ^ ldvt -} ->
   Int {- ^ lwork -} ->
   Int {- ^ lrwork -} ->
   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)
gesdd :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
gesdd Char
jobz Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
ucol Int
ldu Int
ldvt Int
lwork Int
lrwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray (ZeroInt, ZeroInt) (Complex Float)
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
ucol Int
ldu
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvt
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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
lrwork])
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*[Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   ContT
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr (Complex Float)
uPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
u
      Ptr CInt
lduPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr (Complex Float)
vtPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vt
      Ptr CInt
ldvtPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gesdd Ptr CChar
jobzPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
sPtr Ptr (Complex Float)
uPtr Ptr CInt
lduPtr Ptr (Complex Float)
vtPtr Ptr CInt
ldvtPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
u
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vt
         IO
  (Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex 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/cgesv.f>
gesv ::
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Array ZeroInt CInt, Int)
gesv :: IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt CInt, Int)
gesv IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gesv Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/cgesvd.f>
gesvd ::
   Char {- ^ jobu -} ->
   Char {- ^ jobvt -} ->
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ ucol -} ->
   Int {- ^ ldu -} ->
   Int {- ^ ldvt -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)
gesvd :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
gesvd Char
jobu Char
jobvt Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
ucol Int
ldu Int
ldvt Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   IOArray (ZeroInt, ZeroInt) (Complex Float)
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
ucol Int
ldu
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vt <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvt
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*[Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   ContT
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobuPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu
      Ptr CChar
jobvtPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvt
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr (Complex Float)
uPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
u
      Ptr CInt
lduPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr (Complex Float)
vtPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vt
      Ptr CInt
ldvtPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvt
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gesvd Ptr CChar
jobuPtr Ptr CChar
jobvtPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
sPtr Ptr (Complex Float)
uPtr Ptr CInt
lduPtr Ptr (Complex Float)
vtPtr Ptr CInt
ldvtPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
u
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vt
         IO
  (Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex 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/cgesvx.f>
gesvx ::
   Char {- ^ fact -} ->
   Char {- ^ trans -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->
   IOArray ZeroInt CInt {- ^ ipiv -} ->
   Char {- ^ equed -} ->
   IOArray ZeroInt Float {- ^ r -} ->
   IOArray ZeroInt Float {- ^ c -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Char, Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)
gesvx :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt CInt
-> Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
gesvx Char
fact Char
trans IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
af IOArray ZeroInt CInt
ipiv Char
equed IOArray ZeroInt Float
r IOArray ZeroInt Float
c IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
ldx = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
afDim0,Int
afDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
af
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
ipiv
   let rDim0 :: Int
rDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
r
   let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
c
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldaf :: Int
ldaf = Int
afDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"gesvx: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
   String -> Bool -> IO ()
Call.assert String
"gesvx: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   String -> Bool -> IO ()
Call.assert String
"gesvx: n == rDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
rDim0)
   String -> Bool -> IO ()
Call.assert String
"gesvx: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
factPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
      Ptr CChar
transPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
afPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
af
      Ptr CInt
ldafPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr CChar
equedPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
      Ptr Float
rPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
r
      Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
rcondPtr <- FortranIO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CChar
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gesvx Ptr CChar
factPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr CChar
equedPtr Ptr Float
rPtr Ptr Float
cPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Char
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
     Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Char
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Char
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Char
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, 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) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
         IO
  (Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO
  (Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array 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/cgetc2.f>
getc2 ::
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
getc2 :: IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
getc2 IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
jpiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt CInt, Array ZeroInt CInt, Int)
  IO
  (Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt CInt, Array ZeroInt CInt, Int)
   IO
   (Array ZeroInt CInt, Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> ContT
     (Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     (Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr CInt
jpivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpiv
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt CInt, Array ZeroInt CInt, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt CInt, Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getc2 Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr CInt
jpivPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
     (Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     (Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (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/cgetf2.f>
getf2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt CInt, Int)
getf2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt CInt, Int)
getf2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getf2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall (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/cgetrf.f>
getrf ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt CInt, Int)
getrf :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt CInt, Int)
getrf Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
m,Int
n])
   ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getrf Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall (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/cgetri.f>
getri ::
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Int {- ^ lwork -} ->
   IO (Int)
getri :: IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt -> Int -> IO Int
getri IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"getri: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getri Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/cgetrs.f>
getrs ::
   Char {- ^ trans -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
getrs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
getrs Char
trans Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"getrs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.getrs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/cggbak.f>
ggbak ::
   Char {- ^ job -} ->
   Char {- ^ side -} ->
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   Array ZeroInt Float {- ^ lscale -} ->
   Array ZeroInt Float {- ^ rscale -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ v -} ->
   IO (Int)
ggbak :: Char
-> Char
-> Int
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
ggbak Char
job Char
side Int
ilo Int
ihi Array ZeroInt Float
lscale Array ZeroInt Float
rscale IOArray (ZeroInt, ZeroInt) (Complex Float)
v = do
   let lscaleDim0 :: Int
lscaleDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
lscale
   let rscaleDim0 :: Int
rscaleDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
rscale
   let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
v
   let n :: Int
n = Int
lscaleDim0
   let m :: Int
m = Int
vDim0
   let ldv :: Int
ldv = Int
vDim1
   String -> Bool -> IO ()
Call.assert String
"ggbak: n == rscaleDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
rscaleDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
      Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iloPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr Float
lscalePtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
lscale
      Ptr Float
rscalePtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
rscale
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr (Complex Float)
vPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
v
      Ptr CInt
ldvPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggbak Ptr CChar
jobPtr Ptr CChar
sidePtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
lscalePtr Ptr Float
rscalePtr Ptr CInt
mPtr Ptr (Complex Float)
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/cggbal.f>
ggbal ::
   Char {- ^ job -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ lwork -} ->
   IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
ggbal :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
ggbal Char
job IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"ggbal: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt Float
lscale <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
rscale <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
   ContT
  (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobPtr <- Char
-> FortranIO
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
iloPtr <- FortranIO
  (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
ihiPtr <- FortranIO
  (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
lscalePtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
lscale
      Ptr Float
rscalePtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rscale
      Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      Ptr CInt
infoPtr <- FortranIO
  (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ggbal Ptr CChar
jobPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
lscalePtr Ptr Float
rscalePtr Ptr Float
workPtr Ptr CInt
infoPtr
      IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Int
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Int
      -> Int
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Int
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Int
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
iloPtr)
         IO
  (Int
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ihiPtr)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
lscale
         IO
  (Array ZeroInt Float
   -> Int
   -> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int -> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rscale
         IO
  (Int -> (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO (Int, Int, Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgges.f>
gges ::
   Char {- ^ jobvsl -} ->
   Char {- ^ jobvsr -} ->
   Char {- ^ sort -} ->
   FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool) {- ^ selctg -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldvsl -} ->
   Int {- ^ ldvsr -} ->
   Int {- ^ lwork -} ->
   IO (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)
gges :: Char
-> Char
-> Char
-> FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
gges Char
jobvsl Char
jobvsr Char
sort FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool)
selctg IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
ldvsl Int
ldvsr Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"gges: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt (Complex Float)
alpha <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
beta <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vsl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsl
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vsr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsr
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Bool
bwork <- Int -> IO (IOArray ZeroInt Bool)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO
      (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobvslPtr <- Char
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvsl
      Ptr CChar
jobvsrPtr <- Char
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvsr
      Ptr CChar
sortPtr <- Char
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
      FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool)
selctgPtr <- FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool)
-> ContT
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool))
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool)
selctg
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
sdimPtr <- FortranIO
  (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
alphaPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
alpha
      Ptr (Complex Float)
betaPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
beta
      Ptr (Complex Float)
vslPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vsl
      Ptr CInt
ldvslPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsl
      Ptr (Complex Float)
vsrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vsr
      Ptr CInt
ldvsrPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Bool)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Bool
bwork
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.gges Ptr CChar
jobvslPtr Ptr CChar
jobvsrPtr Ptr CChar
sortPtr FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool)
selctgPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr CInt
sdimPtr Ptr (Complex Float)
alphaPtr Ptr (Complex Float)
betaPtr Ptr (Complex Float)
vslPtr Ptr CInt
ldvslPtr Ptr (Complex Float)
vsrPtr Ptr CInt
ldvsrPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Int, Array ZeroInt (Complex Float),
     Array ZeroInt (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Int
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Int
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex 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
sdimPtr)
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
alpha
         IO
  (Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
beta
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vsl
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Int, Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vsr
         IO
  (Int
   -> (Int, Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int
-> IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex 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/cggesx.f>
ggesx ::
   Char {- ^ jobvsl -} ->
   Char {- ^ jobvsr -} ->
   Char {- ^ sort -} ->
   FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool) {- ^ selctg -} ->
   Char {- ^ sense -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldvsl -} ->
   Int {- ^ ldvsr -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt Float, Array ZeroInt Float, Int)
ggesx :: Char
-> Char
-> Char
-> FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool)
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> Int
-> IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
ggesx Char
jobvsl Char
jobvsr Char
sort FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool)
selctg Char
sense IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
ldvsl Int
ldvsr Int
lwork Int
liwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"ggesx: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt (Complex Float)
alpha <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
beta <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vsl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsl
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vsr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvsr
   IOArray ZeroInt Float
rconde <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
   IOArray ZeroInt Float
rcondv <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> 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 (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
   Array ZeroInt Float, Int)
  IO
  (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
   Array ZeroInt Float, Int)
-> IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
    Array ZeroInt Float, Int)
   IO
   (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
    Array ZeroInt Float, Int)
 -> IO
      (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> ContT
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
-> IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobvslPtr <- Char
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvsl
      Ptr CChar
jobvsrPtr <- Char
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvsr
      Ptr CChar
sortPtr <- Char
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sort
      FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool)
selctgPtr <- FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool)
-> ContT
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     IO
     (FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool))
forall (f :: * -> *) a. Applicative f => a -> f a
pure FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool)
selctg
      Ptr CChar
sensePtr <- Char
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sense
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
sdimPtr <- FortranIO
  (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
   Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
alphaPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
alpha
      Ptr (Complex Float)
betaPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
beta
      Ptr (Complex Float)
vslPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vsl
      Ptr CInt
ldvslPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsl
      Ptr (Complex Float)
vsrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vsr
      Ptr CInt
ldvsrPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvsr
      Ptr Float
rcondePtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rconde
      Ptr Float
rcondvPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rcondv
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
liworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     (Ptr Bool)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Bool
bwork
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
   Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool)
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.ggesx Ptr CChar
jobvslPtr Ptr CChar
jobvsrPtr Ptr CChar
sortPtr FunPtr (Ptr (Complex Float) -> Ptr (Complex Float) -> IO Bool)
selctgPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr CInt
sdimPtr Ptr (Complex Float)
alphaPtr Ptr (Complex Float)
betaPtr Ptr (Complex Float)
vslPtr Ptr CInt
ldvslPtr Ptr (Complex Float)
vsrPtr Ptr CInt
ldvsrPtr Ptr Float
rcondePtr Ptr Float
rcondvPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
   Array ZeroInt Float, Int)
-> ContT
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
    Array ZeroInt Float, Int)
 -> ContT
      (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt Float, Int)
      IO
      (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
-> ContT
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
     IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Int, Array ZeroInt (Complex Float),
     Array ZeroInt (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
     Array ZeroInt Float, Int))
-> IO
     (Int
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,)
         IO
  (Int
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array 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
sdimPtr)
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
alpha
         IO
  (Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
beta
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vsl
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vsr
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Int, Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rconde
         IO
  (Array ZeroInt Float
   -> Int
   -> (Int, Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Int, Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rcondv
         IO
  (Int
   -> (Int, Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array 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/cggev.f>
ggev ::
   Char {- ^ jobvl -} ->
   Char {- ^ jobvr -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldvl -} ->
   Int {- ^ ldvr -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)
ggev :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
ggev Char
jobvl Char
jobvr IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
ldvl Int
ldvr Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"ggev: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt (Complex Float)
alpha <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
beta <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvr
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobvlPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvl
      Ptr CChar
jobvrPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvr
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
alphaPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
alpha
      Ptr (Complex Float)
betaPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
beta
      Ptr (Complex Float)
vlPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vl
      Ptr CInt
ldvlPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
      Ptr (Complex Float)
vrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vr
      Ptr CInt
ldvrPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ggev Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
alphaPtr Ptr (Complex Float)
betaPtr Ptr (Complex Float)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Float)
vrPtr Ptr CInt
ldvrPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
alpha
         IO
  (Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
beta
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vl
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vr
         IO
  (Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex 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/cggevx.f>
ggevx ::
   Char {- ^ balanc -} ->
   Char {- ^ jobvl -} ->
   Char {- ^ jobvr -} ->
   Char {- ^ sense -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldvl -} ->
   Int {- ^ ldvr -} ->
   Int {- ^ lwork -} ->
   Int {- ^ lrwork -} ->
   IO (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int, Int, Array ZeroInt Float, Array ZeroInt Float, Float, Float, Array ZeroInt Float, Array ZeroInt Float, Int)
ggevx :: Char
-> Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
ggevx Char
balanc Char
jobvl Char
jobvr Char
sense IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
ldvl Int
ldvr Int
lwork Int
lrwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"ggevx: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt (Complex Float)
alpha <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
beta <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vl <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvl
   IOArray (ZeroInt, ZeroInt) (Complex Float)
vr <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldvr
   IOArray ZeroInt Float
lscale <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
rscale <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
rconde <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
rcondv <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lrwork
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2)
   IOArray ZeroInt Bool
bwork <- Int -> IO (IOArray ZeroInt Bool)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Array ZeroInt Float, Float, Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Array ZeroInt Float, Float, Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
    Array ZeroInt Float, Array ZeroInt Float, Float, Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
    Array ZeroInt Float, Array ZeroInt Float, Float, Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
balancPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
balanc
      Ptr CChar
jobvlPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvl
      Ptr CChar
jobvrPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobvr
      Ptr CChar
sensePtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
sense
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
alphaPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
alpha
      Ptr (Complex Float)
betaPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
beta
      Ptr (Complex Float)
vlPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vl
      Ptr CInt
ldvlPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
      Ptr (Complex Float)
vrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vr
      Ptr CInt
ldvrPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
      Ptr CInt
iloPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Array ZeroInt Float, Float, Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
ihiPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Array ZeroInt Float, Float, Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
lscalePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
lscale
      Ptr Float
rscalePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rscale
      Ptr Float
abnrmPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Array ZeroInt Float, Float, Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
bbnrmPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Array ZeroInt Float, Float, Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
rcondePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rconde
      Ptr Float
rcondvPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rcondv
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr Bool
bworkPtr <- IOArray ZeroInt Bool
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Bool)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Bool
bwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Array ZeroInt Float, Float, Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Bool
-> Ptr CInt
-> IO ()
FFI.ggevx Ptr CChar
balancPtr Ptr CChar
jobvlPtr Ptr CChar
jobvrPtr Ptr CChar
sensePtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
alphaPtr Ptr (Complex Float)
betaPtr Ptr (Complex Float)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Float)
vrPtr Ptr CInt
ldvrPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr Float
lscalePtr Ptr Float
rscalePtr Ptr Float
abnrmPtr Ptr Float
bbnrmPtr Ptr Float
rcondePtr Ptr Float
rcondvPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
iworkPtr Ptr Bool
bworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
   Array ZeroInt Float, Array ZeroInt Float, Float, Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
    Array ZeroInt Float, Array ZeroInt Float, Float, Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> Int
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Float
 -> Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
     Array ZeroInt Float, Array ZeroInt Float, Float, Float,
     Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> Int
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Array ZeroInt Float, Float, Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,,)
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> Int
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> Int
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Array ZeroInt Float, Float, Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
alpha
         IO
  (Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> Int
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> Int
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Array ZeroInt Float, Float, Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
beta
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> Int
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> Int
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Array ZeroInt Float, Float, Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vl
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> Int
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> Int
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Array ZeroInt Float, Float, Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
vr
         IO
  (Int
   -> Int
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Int
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Array ZeroInt Float, Float, Float,
          Array ZeroInt Float, Array 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
iloPtr)
         IO
  (Int
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Array ZeroInt Float, Float, Float,
          Array ZeroInt Float, Array 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
ihiPtr)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Array ZeroInt Float, Float, Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
lscale
         IO
  (Array ZeroInt Float
   -> Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Float
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Array ZeroInt Float, Float, Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rscale
         IO
  (Float
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Array ZeroInt Float, Float, Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
abnrmPtr
         IO
  (Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Array ZeroInt Float, Float, Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
bbnrmPtr
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Array ZeroInt Float, Float, Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rconde
         IO
  (Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
          Array ZeroInt Float, Array ZeroInt Float, Float, Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
rcondv
         IO
  (Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
       Array ZeroInt Float, Array ZeroInt Float, Float, Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int, Int,
      Array ZeroInt Float, Array ZeroInt Float, Float, Float,
      Array ZeroInt Float, Array 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/cggglm.f>
ggglm ::
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray ZeroInt (Complex Float) {- ^ d -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
ggglm :: IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> Int
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
ggglm IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b IOArray ZeroInt (Complex Float)
d Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
d
   let m :: Int
m = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let p :: Int
p = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let n :: Int
n = Int
dDim0
   IOArray ZeroInt (Complex Float)
x <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   IOArray ZeroInt (Complex Float)
y <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
p
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float), Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
 -> IO
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
pPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
dPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
d
      Ptr (Complex Float)
xPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
x
      Ptr (Complex Float)
yPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
y
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggglm Ptr CInt
nPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
dPtr Ptr (Complex Float)
xPtr Ptr (Complex Float)
yPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Int
 -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
     Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
x
         IO
  (Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
y
         IO
  (Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex 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/cgghrd.f>
gghrd ::
   Char {- ^ compq -} ->
   Char {- ^ compz -} ->
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   IO (Int)
gghrd :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
gghrd Char
compq Char
compz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
q IOArray (ZeroInt, ZeroInt) (Complex Float)
z = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
q
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   let ldq :: Int
ldq = Int
qDim1
   let ldz :: Int
ldz = Int
zDim1
   String -> Bool -> IO ()
Call.assert String
"gghrd: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   String -> Bool -> IO ()
Call.assert String
"gghrd: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   String -> Bool -> IO ()
Call.assert String
"gghrd: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
compqPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compq
      Ptr CChar
compzPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iloPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gghrd Ptr CChar
compqPtr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr (Complex Float)
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/cgglse.f>
gglse ::
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray ZeroInt (Complex Float) {- ^ c -} ->
   IOArray ZeroInt (Complex Float) {- ^ d -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Int)
gglse :: IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> Int
-> IO (Array ZeroInt (Complex Float), Int)
gglse IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b IOArray ZeroInt (Complex Float)
c IOArray ZeroInt (Complex Float)
d Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
c
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
d
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   let m :: Int
m = Int
cDim0
   let p :: Int
p = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"gglse: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt (Complex Float)
x <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
pPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
cPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
c
      Ptr (Complex Float)
dPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
d
      Ptr (Complex Float)
xPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
x
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gglse Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
pPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
cPtr Ptr (Complex Float)
dPtr Ptr (Complex Float)
xPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
x
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cggqrf.f>
ggqrf ::
   Int {- ^ n -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
ggqrf :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
ggqrf Int
n IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let m :: Int
m = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let p :: Int
p = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   IOArray ZeroInt (Complex Float)
taua <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
taub <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float), Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
 -> IO
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
pPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauaPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
taua
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
taubPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
taub
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggqrf Ptr CInt
nPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
taubPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Int
 -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
     Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
taua
         IO
  (Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
taub
         IO
  (Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex 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/cggrqf.f>
ggrqf ::
   Int {- ^ m -} ->
   Int {- ^ p -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
ggrqf :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
ggrqf Int
m Int
p IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"ggrqf: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt (Complex Float)
taua <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
taub <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float), Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
 -> IO
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
pPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauaPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
taua
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
taubPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
taub
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ggrqf Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
taubPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Int
 -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
     Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
taua
         IO
  (Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
taub
         IO
  (Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex 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/cgtcon.f>
gtcon ::
   Char {- ^ norm -} ->
   Array ZeroInt (Complex Float) {- ^ dl -} ->
   Array ZeroInt (Complex Float) {- ^ d -} ->
   Array ZeroInt (Complex Float) {- ^ du -} ->
   Array ZeroInt (Complex Float) {- ^ du2 -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Float {- ^ anorm -} ->
   IO (Float, Int)
gtcon :: Char
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt CInt
-> Float
-> IO (Float, Int)
gtcon Char
norm Array ZeroInt (Complex Float)
dl Array ZeroInt (Complex Float)
d Array ZeroInt (Complex Float)
du Array ZeroInt (Complex Float)
du2 Array ZeroInt CInt
ipiv Float
anorm = do
   let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
dl
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
d
   let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
du
   let du2Dim0 :: Int
du2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
du2
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"gtcon: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
   String -> Bool -> IO ()
Call.assert String
"gtcon: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
   String -> Bool -> IO ()
Call.assert String
"gtcon: n-2 == du2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
du2Dim0)
   String -> Bool -> IO ()
Call.assert String
"gtcon: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
dlPtr <- Array ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
dl
      Ptr (Complex Float)
dPtr <- Array ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
d
      Ptr (Complex Float)
duPtr <- Array ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
du
      Ptr (Complex Float)
du2Ptr <- Array ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
du2
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
      Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.gtcon Ptr CChar
normPtr Ptr CInt
nPtr Ptr (Complex Float)
dlPtr Ptr (Complex Float)
dPtr Ptr (Complex Float)
duPtr Ptr (Complex Float)
du2Ptr Ptr CInt
ipivPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgtrfs.f>
gtrfs ::
   Char {- ^ trans -} ->
   Array ZeroInt (Complex Float) {- ^ dl -} ->
   Array ZeroInt (Complex Float) {- ^ d -} ->
   Array ZeroInt (Complex Float) {- ^ du -} ->
   Array ZeroInt (Complex Float) {- ^ dlf -} ->
   Array ZeroInt (Complex Float) {- ^ df -} ->
   Array ZeroInt (Complex Float) {- ^ duf -} ->
   Array ZeroInt (Complex Float) {- ^ du2 -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
gtrfs :: Char
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
gtrfs Char
trans Array ZeroInt (Complex Float)
dl Array ZeroInt (Complex Float)
d Array ZeroInt (Complex Float)
du Array ZeroInt (Complex Float)
dlf Array ZeroInt (Complex Float)
df Array ZeroInt (Complex Float)
duf Array ZeroInt (Complex Float)
du2 Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
x = do
   let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
dl
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
d
   let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
du
   let dlfDim0 :: Int
dlfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
dlf
   let dfDim0 :: Int
dfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
df
   let dufDim0 :: Int
dufDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
duf
   let du2Dim0 :: Int
du2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
du2
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x
   let n :: Int
n = Int
dDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"gtrfs: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
   String -> Bool -> IO ()
Call.assert String
"gtrfs: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
   String -> Bool -> IO ()
Call.assert String
"gtrfs: n-1 == dlfDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlfDim0)
   String -> Bool -> IO ()
Call.assert String
"gtrfs: n == dfDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dfDim0)
   String -> Bool -> IO ()
Call.assert String
"gtrfs: n-1 == dufDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dufDim0)
   String -> Bool -> IO ()
Call.assert String
"gtrfs: n-2 == du2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
du2Dim0)
   String -> Bool -> IO ()
Call.assert String
"gtrfs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   String -> Bool -> IO ()
Call.assert String
"gtrfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
dlPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
dl
      Ptr (Complex Float)
dPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
d
      Ptr (Complex Float)
duPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
du
      Ptr (Complex Float)
dlfPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
dlf
      Ptr (Complex Float)
dfPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
df
      Ptr (Complex Float)
dufPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
duf
      Ptr (Complex Float)
du2Ptr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
du2
      Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gtrfs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
dlPtr Ptr (Complex Float)
dPtr Ptr (Complex Float)
duPtr Ptr (Complex Float)
dlfPtr Ptr (Complex Float)
dfPtr Ptr (Complex Float)
dufPtr Ptr (Complex Float)
du2Ptr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cgtsv.f>
gtsv ::
   IOArray ZeroInt (Complex Float) {- ^ dl -} ->
   IOArray ZeroInt (Complex Float) {- ^ d -} ->
   IOArray ZeroInt (Complex Float) {- ^ du -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
gtsv :: IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
gtsv IOArray ZeroInt (Complex Float)
dl IOArray ZeroInt (Complex Float)
d IOArray ZeroInt (Complex Float)
du IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
dl
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
d
   let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
du
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
dDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"gtsv: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
   String -> Bool -> IO ()
Call.assert String
"gtsv: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
dlPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
dl
      Ptr (Complex Float)
dPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
d
      Ptr (Complex Float)
duPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
du
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gtsv Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
dlPtr Ptr (Complex Float)
dPtr Ptr (Complex Float)
duPtr Ptr (Complex Float)
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/cgtsvx.f>
gtsvx ::
   Char {- ^ fact -} ->
   Char {- ^ trans -} ->
   Array ZeroInt (Complex Float) {- ^ dl -} ->
   Array ZeroInt (Complex Float) {- ^ d -} ->
   Array ZeroInt (Complex Float) {- ^ du -} ->
   IOArray ZeroInt (Complex Float) {- ^ dlf -} ->
   IOArray ZeroInt (Complex Float) {- ^ df -} ->
   IOArray ZeroInt (Complex Float) {- ^ duf -} ->
   IOArray ZeroInt (Complex Float) {- ^ du2 -} ->
   IOArray ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)
gtsvx :: Char
-> Char
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
gtsvx Char
fact Char
trans Array ZeroInt (Complex Float)
dl Array ZeroInt (Complex Float)
d Array ZeroInt (Complex Float)
du IOArray ZeroInt (Complex Float)
dlf IOArray ZeroInt (Complex Float)
df IOArray ZeroInt (Complex Float)
duf IOArray ZeroInt (Complex Float)
du2 IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Float)
b Int
ldx = do
   let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
dl
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
d
   let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
du
   let dlfDim0 :: Int
dlfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
dlf
   let dfDim0 :: Int
dfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
df
   let dufDim0 :: Int
dufDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
duf
   let du2Dim0 :: Int
du2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
du2
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
dDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"gtsvx: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
   String -> Bool -> IO ()
Call.assert String
"gtsvx: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
   String -> Bool -> IO ()
Call.assert String
"gtsvx: n-1 == dlfDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlfDim0)
   String -> Bool -> IO ()
Call.assert String
"gtsvx: n == dfDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dfDim0)
   String -> Bool -> IO ()
Call.assert String
"gtsvx: n-1 == dufDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dufDim0)
   String -> Bool -> IO ()
Call.assert String
"gtsvx: n-2 == du2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
du2Dim0)
   String -> Bool -> IO ()
Call.assert String
"gtsvx: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
factPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
      Ptr CChar
transPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
dlPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
dl
      Ptr (Complex Float)
dPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
d
      Ptr (Complex Float)
duPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
du
      Ptr (Complex Float)
dlfPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
dlf
      Ptr (Complex Float)
dfPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
df
      Ptr (Complex Float)
dufPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
duf
      Ptr (Complex Float)
du2Ptr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
du2
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
rcondPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.gtsvx Ptr CChar
factPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
dlPtr Ptr (Complex Float)
dPtr Ptr (Complex Float)
duPtr Ptr (Complex Float)
dlfPtr Ptr (Complex Float)
dfPtr Ptr (Complex Float)
dufPtr Ptr (Complex Float)
du2Ptr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
     Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
         IO
  (Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO
  (Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array 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/cgttrf.f>
gttrf ::
   IOArray ZeroInt (Complex Float) {- ^ dl -} ->
   IOArray ZeroInt (Complex Float) {- ^ d -} ->
   IOArray ZeroInt (Complex Float) {- ^ du -} ->
   IO (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
gttrf :: IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
gttrf IOArray ZeroInt (Complex Float)
dl IOArray ZeroInt (Complex Float)
d IOArray ZeroInt (Complex Float)
du = do
   let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
dl
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
d
   let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
du
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"gttrf: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
   String -> Bool -> IO ()
Call.assert String
"gttrf: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
   IOArray ZeroInt (Complex Float)
du2 <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2)
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
  IO
  (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
-> IO (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
   IO
   (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int))
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
-> IO (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
dlPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
dl
      Ptr (Complex Float)
dPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
d
      Ptr (Complex Float)
duPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
du
      Ptr (Complex Float)
du2Ptr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
du2
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int) IO ())
-> IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gttrf Ptr CInt
nPtr Ptr (Complex Float)
dlPtr Ptr (Complex Float)
dPtr Ptr (Complex Float)
duPtr Ptr (Complex Float)
du2Ptr Ptr CInt
ipivPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
      IO
      (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Array ZeroInt CInt
 -> Int
 -> (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt CInt
      -> Int -> (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
du2
         IO
  (Array ZeroInt CInt
   -> Int -> (Array ZeroInt (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int -> (Array ZeroInt (Complex Float), 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 (Complex Float), Array ZeroInt CInt, Int))
-> IO Int
-> IO (Array ZeroInt (Complex Float), 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/cgttrs.f>
gttrs ::
   Char {- ^ trans -} ->
   Array ZeroInt (Complex Float) {- ^ dl -} ->
   Array ZeroInt (Complex Float) {- ^ d -} ->
   Array ZeroInt (Complex Float) {- ^ du -} ->
   Array ZeroInt (Complex Float) {- ^ du2 -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
gttrs :: Char
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
gttrs Char
trans Array ZeroInt (Complex Float)
dl Array ZeroInt (Complex Float)
d Array ZeroInt (Complex Float)
du Array ZeroInt (Complex Float)
du2 Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
dl
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
d
   let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
du
   let du2Dim0 :: Int
du2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
du2
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
dDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"gttrs: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
   String -> Bool -> IO ()
Call.assert String
"gttrs: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
   String -> Bool -> IO ()
Call.assert String
"gttrs: n-2 == du2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
du2Dim0)
   String -> Bool -> IO ()
Call.assert String
"gttrs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
dlPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
dl
      Ptr (Complex Float)
dPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
d
      Ptr (Complex Float)
duPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
du
      Ptr (Complex Float)
du2Ptr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
du2
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.gttrs Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
dlPtr Ptr (Complex Float)
dPtr Ptr (Complex Float)
duPtr Ptr (Complex Float)
du2Ptr Ptr CInt
ipivPtr Ptr (Complex Float)
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/cgtts2.f>
gtts2 ::
   Int {- ^ itrans -} ->
   Array ZeroInt (Complex Float) {- ^ dl -} ->
   Array ZeroInt (Complex Float) {- ^ d -} ->
   Array ZeroInt (Complex Float) {- ^ du -} ->
   Array ZeroInt (Complex Float) {- ^ du2 -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO ()
gtts2 :: Int
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO ()
gtts2 Int
itrans Array ZeroInt (Complex Float)
dl Array ZeroInt (Complex Float)
d Array ZeroInt (Complex Float)
du Array ZeroInt (Complex Float)
du2 Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
dl
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
d
   let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
du
   let du2Dim0 :: Int
du2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
du2
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
dDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"gtts2: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
   String -> Bool -> IO ()
Call.assert String
"gtts2: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
   String -> Bool -> IO ()
Call.assert String
"gtts2: n-2 == du2Dim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
du2Dim0)
   String -> Bool -> IO ()
Call.assert String
"gtts2: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itransPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itrans
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
dlPtr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
dl
      Ptr (Complex Float)
dPtr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
d
      Ptr (Complex Float)
duPtr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
du
      Ptr (Complex Float)
du2Ptr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
du2
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO () (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
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 (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.gtts2 Ptr CInt
itransPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
dlPtr Ptr (Complex Float)
dPtr Ptr (Complex Float)
duPtr Ptr (Complex Float)
du2Ptr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chbev.f>
hbev ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Int {- ^ ldz -} ->
   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)
hbev :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
hbev Char
jobz Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Float)
ab Int
ldz = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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 Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
   IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.hbev Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
     Int))
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex 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/chbevd.f>
hbevd ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Int {- ^ ldz -} ->
   Int {- ^ lwork -} ->
   Int {- ^ rworkSize -} ->
   Int {- ^ lrwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)
hbevd :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
hbevd Char
jobz Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Float)
ab Int
ldz Int
lwork Int
rworkSize Int
lrwork Int
liwork = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
   ContT
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
   IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
lrworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
liworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hbevd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
     Int))
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex 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/chbevx.f>
hbevx ::
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Int {- ^ ldq -} ->
   Float {- ^ vl -} ->
   Float {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Float {- ^ abstol -} ->
   Int {- ^ m -} ->
   Int {- ^ ldz -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
hbevx :: Char
-> Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
hbevx Char
jobz Char
range Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Float)
ab Int
ldq Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray (ZeroInt, ZeroInt) (Complex Float)
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
7Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Int,
   Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array ZeroInt CInt, Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int,
   Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array ZeroInt CInt, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Int,
    Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array ZeroInt CInt, Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Int,
    Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array ZeroInt CInt, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
rangePtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Float
vlPtr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
      Ptr Float
vuPtr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
      Ptr CInt
ilPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
      Ptr CInt
iuPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
      Ptr Float
abstolPtr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
      Ptr CInt
mPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int,
   Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int,
   Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hbevx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int,
   Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Int,
    Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array ZeroInt CInt, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array ZeroInt CInt
 -> Int
 -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
     Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
     Array ZeroInt CInt, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
          Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
          Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
         IO
  (Int
   -> Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
          Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          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 Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
          Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
          Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
          Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          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) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      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/chbgst.f>
hbgst ::
   Char {- ^ vect -} ->
   Char {- ^ uplo -} ->
   Int {- ^ ka -} ->
   Int {- ^ kb -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ bb -} ->
   Int {- ^ ldx -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)
hbgst :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
hbgst Char
vect Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) (Complex Float)
ab Array (ZeroInt, ZeroInt) (Complex Float)
bb Int
ldx = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
bbDim0,Int
bbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
bb
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let ldbb :: Int
ldbb = Int
bbDim1
   String -> Bool -> IO ()
Call.assert String
"hbgst: n == bbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bbDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldx
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
vectPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
vect
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kaPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ka
      Ptr CInt
kbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr (Complex Float)
bbPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
bb
      Ptr CInt
ldbbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.hbgst Ptr CChar
vectPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr (Complex Float)
bbPtr Ptr CInt
ldbbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
         IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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/chbgv.f>
hbgv ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ ka -} ->
   Int {- ^ kb -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ bb -} ->
   Int {- ^ ldz -} ->
   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)
hbgv :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
hbgv Char
jobz Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) (Complex Float)
ab IOArray (ZeroInt, ZeroInt) (Complex Float)
bb Int
ldz = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
bbDim0,Int
bbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
bb
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let ldbb :: Int
ldbb = Int
bbDim1
   String -> Bool -> IO ()
Call.assert String
"hbgv: n == bbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bbDim0)
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
   IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ka
      Ptr CInt
kbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr (Complex Float)
bbPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
bb
      Ptr CInt
ldbbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbb
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.hbgv Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr (Complex Float)
bbPtr Ptr CInt
ldbbPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
     Int))
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex 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/chbgvd.f>
hbgvd ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ ka -} ->
   Int {- ^ kb -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ bb -} ->
   Int {- ^ ldz -} ->
   Int {- ^ lwork -} ->
   Int {- ^ lrwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)
hbgvd :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
hbgvd Char
jobz Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) (Complex Float)
ab IOArray (ZeroInt, ZeroInt) (Complex Float)
bb Int
ldz Int
lwork Int
lrwork Int
liwork = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
bbDim0,Int
bbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
bb
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let ldbb :: Int
ldbb = Int
bbDim1
   String -> Bool -> IO ()
Call.assert String
"hbgvd: n == bbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bbDim0)
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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
lrwork])
   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 Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
   IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ka
      Ptr CInt
kbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr (Complex Float)
bbPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
bb
      Ptr CInt
ldbbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbb
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
lrworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
liworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hbgvd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr (Complex Float)
bbPtr Ptr CInt
ldbbPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
     Int))
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex 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/chbgvx.f>
hbgvx ::
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   Char {- ^ uplo -} ->
   Int {- ^ ka -} ->
   Int {- ^ kb -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ bb -} ->
   Int {- ^ ldq -} ->
   Float {- ^ vl -} ->
   Float {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Float {- ^ abstol -} ->
   Int {- ^ ldz -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
hbgvx :: Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
hbgvx Char
jobz Char
range Char
uplo Int
ka Int
kb IOArray (ZeroInt, ZeroInt) (Complex Float)
ab IOArray (ZeroInt, ZeroInt) (Complex Float)
bb Int
ldq Float
vl Float
vu Int
il Int
iu Float
abstol Int
ldz = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
bbDim0,Int
bbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
bb
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let ldbb :: Int
ldbb = Int
bbDim1
   String -> Bool -> IO ()
Call.assert String
"hbgvx: n == bbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bbDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
7Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Int,
   Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array ZeroInt CInt, Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int,
   Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array ZeroInt CInt, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Int,
    Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array ZeroInt CInt, Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Int,
    Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array ZeroInt CInt, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
rangePtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kaPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ka
      Ptr CInt
kbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kb
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr (Complex Float)
bbPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
bb
      Ptr CInt
ldbbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbb
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Float
vlPtr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
      Ptr Float
vuPtr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
      Ptr CInt
ilPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
      Ptr CInt
iuPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
      Ptr Float
abstolPtr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
      Ptr CInt
mPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int,
   Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int,
   Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hbgvx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kaPtr Ptr CInt
kbPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr (Complex Float)
bbPtr Ptr CInt
ldbbPtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int,
   Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Int,
    Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array ZeroInt CInt, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array ZeroInt CInt
 -> Int
 -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
     Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
     Array ZeroInt CInt, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
          Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
          Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
         IO
  (Int
   -> Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
          Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          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 Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
          Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
          Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Int,
          Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          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) (Complex Float), Int,
       Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int,
      Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      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/chbtrd.f>
hbtrd ::
   Char {- ^ vect -} ->
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
hbtrd :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
hbtrd Char
vect Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Float)
ab IOArray (ZeroInt, ZeroInt) (Complex Float)
q = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
q
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let ldq :: Int
ldq = Int
qDim1
   String -> Bool -> IO ()
Call.assert String
"hbtrd: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
vectPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
vect
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.hbtrd Ptr CChar
vectPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
dPtr Ptr Float
ePtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/checon.f>
hecon ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Float {- ^ anorm -} ->
   IO (Float, Int)
hecon :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> Float
-> IO (Float, Int)
hecon Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv Float
anorm = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"hecon: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
      Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.hecon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheequb.f>
heequb ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt Float, Float, Float, Int)
heequb :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Float, Float, Int)
heequb Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array ZeroInt Float, Float, Float, Int)
  IO
  (Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Float, Float, Int)
   IO
   (Array ZeroInt Float, Float, Float, Int)
 -> IO (Array ZeroInt Float, Float, Float, Int))
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr Float
scondPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
amaxPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.heequb Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float, Float, Int)
 -> ContT
      (Array ZeroInt Float, Float, Float, Int)
      IO
      (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Float
 -> Float
 -> Int
 -> (Array ZeroInt Float, Float, Float, Int))
-> IO
     (Array ZeroInt Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
         IO
  (Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float
-> IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scondPtr
         IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float -> IO (Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
         IO (Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Float, Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheev.f>
heev ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Float, Int)
heev :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt Float, Int)
heev Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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 Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.heev Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
wPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
 -> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheevd.f>
heevd ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   Int {- ^ rworkSize -} ->
   Int {- ^ lrwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Float, Int)
heevd :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Float, Int)
heevd Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork Int
rworkSize Int
lrwork Int
liwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
liwork])
   ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
lrworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
liworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.heevd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
wPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
 -> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cheevr.f>
heevr ::
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Float {- ^ vl -} ->
   Float {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Float {- ^ abstol -} ->
   Int {- ^ m -} ->
   Int {- ^ ldz -} ->
   Int {- ^ lwork -} ->
   Int {- ^ lrwork -} ->
   Int {- ^ liwork -} ->
   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
heevr :: Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
heevr Char
jobz Char
range Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz Int
lwork Int
lrwork Int
liwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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
lrwork])
   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 Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
rangePtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
vlPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
      Ptr Float
vuPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
      Ptr CInt
ilPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
      Ptr CInt
iuPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
      Ptr Float
abstolPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
      Ptr CInt
mPtr <- FortranIO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr CInt
isuppzPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isuppz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
lrworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
liworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.heevr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr CInt
isuppzPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Float,
     Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), 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/cheevx.f>
heevx ::
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Float {- ^ vl -} ->
   Float {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Float {- ^ abstol -} ->
   Int {- ^ m -} ->
   Int {- ^ ldz -} ->
   Int {- ^ lwork -} ->
   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
heevx :: Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
heevx Char
jobz Char
range Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
7Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
rangePtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
vlPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
      Ptr Float
vuPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
      Ptr CInt
ilPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
      Ptr CInt
iuPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
      Ptr Float
abstolPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
      Ptr CInt
mPtr <- FortranIO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.heevx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Float,
     Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), 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/chegs2.f>
hegs2 ::
   Int {- ^ itype -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
hegs2 :: Int
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
hegs2 Int
itype Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"hegs2: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itypePtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hegs2 Ptr CInt
itypePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
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/chegst.f>
hegst ::
   Int {- ^ itype -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
hegst :: Int
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
hegst Int
itype Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"hegst: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itypePtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hegst Ptr CInt
itypePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
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/chegv.f>
hegv ::
   Int {- ^ itype -} ->
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Float, Int)
hegv :: Int
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt Float, Int)
hegv Int
itype Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"hegv: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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 Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itypePtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
      Ptr CChar
jobzPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.hegv Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr Float
wPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
 -> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chegvd.f>
hegvd ::
   Int {- ^ itype -} ->
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ lwork -} ->
   Int {- ^ lrwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Float, Int)
hegvd :: Int
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> IO (Array ZeroInt Float, Int)
hegvd Int
itype Char
jobz Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
lwork Int
lrwork Int
liwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"hegvd: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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
lrwork])
   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 Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Int))
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itypePtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
      Ptr CChar
jobzPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
lrworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
liworkPtr <- Int -> FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hegvd Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr Float
wPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Int)
 -> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Int)
-> ContT (Array ZeroInt Float, Int) IO (Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Array ZeroInt Float -> Int -> (Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO (Int -> (Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chegvx.f>
hegvx ::
   Int {- ^ itype -} ->
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Float {- ^ vl -} ->
   Float {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Float {- ^ abstol -} ->
   Int {- ^ m -} ->
   Int {- ^ ldz -} ->
   Int {- ^ lwork -} ->
   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
hegvx :: Int
-> Char
-> Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
hegvx Int
itype Char
jobz Char
range Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"hegvx: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
7Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itypePtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
rangePtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Float
vlPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
      Ptr Float
vuPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
      Ptr CInt
ilPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
      Ptr CInt
iuPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
      Ptr Float
abstolPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
      Ptr CInt
mPtr <- FortranIO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hegvx Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Float,
     Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), 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/cherfs.f>
herfs ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
herfs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
herfs Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a Array (ZeroInt, ZeroInt) (Complex Float)
af Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
x = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
afDim0,Int
afDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
af
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldaf :: Int
ldaf = Int
afDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"herfs: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
   String -> Bool -> IO ()
Call.assert String
"herfs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   String -> Bool -> IO ()
Call.assert String
"herfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
afPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
af
      Ptr CInt
ldafPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
      Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.herfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chesv.f>
hesv ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt CInt, Int)
hesv :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt CInt, Int)
hesv Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hesv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
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/chesvx.f>
hesvx ::
   Char {- ^ fact -} ->
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->
   IOArray ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldx -} ->
   Int {- ^ lwork -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)
hesvx :: Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
hesvx Char
fact Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
af IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Float)
b Int
ldx Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
afDim0,Int
afDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
af
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldaf :: Int
ldaf = Int
afDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"hesvx: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
   String -> Bool -> IO ()
Call.assert String
"hesvx: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
factPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
afPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
af
      Ptr CInt
ldafPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
rcondPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.hesvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
     Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
         IO
  (Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO
  (Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array 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/cheswapr.f>
heswapr ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ i1 -} ->
   Int {- ^ i2 -} ->
   IO ()
heswapr :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO ()
heswapr Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
i1 Int
i2 = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
i1Ptr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i1
      Ptr CInt
i2Ptr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i2
      IO () -> ContT () IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.heswapr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
i1Ptr Ptr CInt
i2Ptr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chetd2.f>
hetd2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt (Complex Float), Int)
hetd2 :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
hetd2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   ContT
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Int)
 -> IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.hetd2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
dPtr Ptr Float
ePtr Ptr (Complex Float)
tauPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Array ZeroInt (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float,
     Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
         IO
  (Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
         IO
  (Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO
  (Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex 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/chetf2.f>
hetf2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt CInt, Int)
hetf2 :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt CInt, Int)
hetf2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hetf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall (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/chetrd.f>
hetrd ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt (Complex Float), Int)
hetrd :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
hetrd Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Int)
 -> IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hetrd Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
dPtr Ptr Float
ePtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Array ZeroInt (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float,
     Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
         IO
  (Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
         IO
  (Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO
  (Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex 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/chetrf.f>
hetrf ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt CInt, Int)
hetrf :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt CInt, Int)
hetrf Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hetrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/chetri.f>
hetri ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IO (Int)
hetri :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> IO Int
hetri Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"hetri: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.hetri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/chetri2.f>
hetri2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Int {- ^ nb -} ->
   Int {- ^ lwork -} ->
   IO (Int)
hetri2 :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> Int
-> Int
-> IO Int
hetri2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv Int
nb Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"hetri2: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nbInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hetri2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/chetri2x.f>
hetri2x ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Int {- ^ nb -} ->
   IO (Int)
hetri2x :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> Int
-> IO Int
hetri2x Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv Int
nb = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"hetri2x: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
nbInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nbInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
workPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
work
      Ptr CInt
nbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hetri2x Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/chetrs.f>
hetrs ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
hetrs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
hetrs Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"hetrs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hetrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/chetrs2.f>
hetrs2 ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
hetrs2 :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
hetrs2 Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"hetrs2: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.hetrs2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
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/chfrk.f>
hfrk ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Int {- ^ n -} ->
   Int {- ^ k -} ->
   Float {- ^ alpha -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Float {- ^ beta -} ->
   IOArray ZeroInt (Complex Float) {- ^ c -} ->
   IO ()
hfrk :: Char
-> Char
-> Char
-> Int
-> Int
-> Float
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> IOArray ZeroInt (Complex Float)
-> IO ()
hfrk Char
transr Char
uplo Char
trans Int
n Int
k Float
alpha Array (ZeroInt, ZeroInt) (Complex Float)
a Float
beta IOArray ZeroInt (Complex Float)
c = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
c
   let _ka :: Int
_ka = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"hfrk: n*(n+1)`div`2 == cDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transrPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      Ptr CChar
uploPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
transPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr Float
alphaPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
alpha
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
betaPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
beta
      Ptr (Complex Float)
cPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
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 Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> IO ()
FFI.hfrk Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr Float
alphaPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
betaPtr Ptr (Complex Float)
cPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chgeqz.f>
hgeqz ::
   Char {- ^ job -} ->
   Char {- ^ compq -} ->
   Char {- ^ compz -} ->
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ t -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
hgeqz :: Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
hgeqz Char
job Char
compq Char
compz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) (Complex Float)
h IOArray (ZeroInt, ZeroInt) (Complex Float)
t IOArray (ZeroInt, ZeroInt) (Complex Float)
q IOArray (ZeroInt, ZeroInt) (Complex Float)
z Int
lwork = do
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
h
   let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
t
   let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
q
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let n :: Int
n = Int
hDim0
   let ldh :: Int
ldh = Int
hDim1
   let ldt :: Int
ldt = Int
tDim1
   let ldq :: Int
ldq = Int
qDim1
   let ldz :: Int
ldz = Int
zDim1
   String -> Bool -> IO ()
Call.assert String
"hgeqz: n == tDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tDim0)
   String -> Bool -> IO ()
Call.assert String
"hgeqz: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   String -> Bool -> IO ()
Call.assert String
"hgeqz: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt (Complex Float)
alpha <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
beta <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
 -> IO
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
      Ptr CChar
compqPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compq
      Ptr CChar
compzPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iloPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr (Complex Float)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
h
      Ptr CInt
ldhPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr (Complex Float)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
t
      Ptr CInt
ldtPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr (Complex Float)
alphaPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
alpha
      Ptr (Complex Float)
betaPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
beta
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.hgeqz Ptr CChar
jobPtr Ptr CChar
compqPtr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Float)
hPtr Ptr CInt
ldhPtr Ptr (Complex Float)
tPtr Ptr CInt
ldtPtr Ptr (Complex Float)
alphaPtr Ptr (Complex Float)
betaPtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Int
 -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
     Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
alpha
         IO
  (Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
beta
         IO
  (Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex 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/chpcon.f>
hpcon ::
   Char {- ^ uplo -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Float {- ^ anorm -} ->
   IO (Float, Int)
hpcon :: Char
-> Array ZeroInt (Complex Float)
-> Array ZeroInt CInt
-> Float
-> IO (Float, Int)
hpcon Char
uplo Array ZeroInt (Complex Float)
ap Array ZeroInt CInt
ipiv Float
anorm = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
ipivDim0
   String -> Bool -> IO ()
Call.assert String
"hpcon: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
      Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.hpcon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr CInt
ipivPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpev.f>
hpev ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   Int {- ^ ldz -} ->
   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)
hpev :: Char
-> Char
-> Int
-> IOArray ZeroInt (Complex Float)
-> Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
hpev Char
jobz Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap Int
ldz = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"hpev: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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
1])
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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 Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
   IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.hpev Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
     Int))
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex 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/chpevd.f>
hpevd ::
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   Int {- ^ ldz -} ->
   Int {- ^ lwork -} ->
   Int {- ^ lrwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)
hpevd :: Char
-> Char
-> Int
-> IOArray ZeroInt (Complex Float)
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
hpevd Char
jobz Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap Int
ldz Int
lwork Int
lrwork Int
liwork = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"hpevd: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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
lrwork])
   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 Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
   IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
lrworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
liworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hpevd Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
     Int))
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex 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/chpevx.f>
hpevx ::
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   Float {- ^ vl -} ->
   Float {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Float {- ^ abstol -} ->
   Int {- ^ m -} ->
   Int {- ^ ldz -} ->
   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
hpevx :: Char
-> Char
-> Char
-> Int
-> IOArray ZeroInt (Complex Float)
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
hpevx Char
jobz Char
range Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"hpevx: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
7Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
rangePtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr Float
vlPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
      Ptr Float
vuPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
      Ptr CInt
ilPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
      Ptr CInt
iuPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
      Ptr Float
abstolPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
      Ptr CInt
mPtr <- FortranIO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hpevx Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Float,
     Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), 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/chpgst.f>
hpgst ::
   Int {- ^ itype -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt (Complex Float) {- ^ bp -} ->
   IO (Int)
hpgst :: Int
-> Char
-> Int
-> IOArray ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> IO Int
hpgst Int
itype Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap Array ZeroInt (Complex Float)
bp = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   let bpDim0 :: Int
bpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
bp
   String -> Bool -> IO ()
Call.assert String
"hpgst: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"hpgst: n*(n+1)`div`2 == bpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bpDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itypePtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
bpPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
bp
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.hpgst Ptr CInt
itypePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
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/chpgv.f>
hpgv ::
   Int {- ^ itype -} ->
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   IOArray ZeroInt (Complex Float) {- ^ bp -} ->
   Int {- ^ ldz -} ->
   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)
hpgv :: Int
-> Char
-> Char
-> Int
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
hpgv Int
itype Char
jobz Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap IOArray ZeroInt (Complex Float)
bp Int
ldz = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   let bpDim0 :: Int
bpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
bp
   String -> Bool -> IO ()
Call.assert String
"hpgv: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"hpgv: n*(n+1)`div`2 == bpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bpDim0)
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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
1])
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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 Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
   IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itypePtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
bpPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
bp
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.hpgv Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
bpPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
     Int))
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex 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/chpgvd.f>
hpgvd ::
   Int {- ^ itype -} ->
   Char {- ^ jobz -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   IOArray ZeroInt (Complex Float) {- ^ bp -} ->
   Int {- ^ ldz -} ->
   Int {- ^ lwork -} ->
   Int {- ^ lrwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Int)
hpgvd :: Int
-> Char
-> Char
-> Int
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
hpgvd Int
itype Char
jobz Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap IOArray ZeroInt (Complex Float)
bp Int
ldz Int
lwork Int
lrwork Int
liwork = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   let bpDim0 :: Int
bpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
bp
   String -> Bool -> IO ()
Call.assert String
"hpgvd: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"hpgvd: n*(n+1)`div`2 == bpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bpDim0)
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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
lrwork])
   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 Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
   IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itypePtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
bpPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
bp
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
lrworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
liworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hpgvd Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
bpPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
     Int))
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex 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/chpgvx.f>
hpgvx ::
   Int {- ^ itype -} ->
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   IOArray ZeroInt (Complex Float) {- ^ bp -} ->
   Float {- ^ vl -} ->
   Float {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Float {- ^ abstol -} ->
   Int {- ^ ldz -} ->
   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
hpgvx :: Int
-> Char
-> Char
-> Char
-> Int
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
hpgvx Int
itype Char
jobz Char
range Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap IOArray ZeroInt (Complex Float)
bp Float
vl Float
vu Int
il Int
iu Float
abstol Int
ldz = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   let bpDim0 :: Int
bpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
bp
   String -> Bool -> IO ()
Call.assert String
"hpgvx: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"hpgvx: n*(n+1)`div`2 == bpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bpDim0)
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldz
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
7Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
itypePtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
itype
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
rangePtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
bpPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
bp
      Ptr Float
vlPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
      Ptr Float
vuPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
      Ptr CInt
ilPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
      Ptr CInt
iuPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
      Ptr Float
abstolPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
      Ptr CInt
mPtr <- FortranIO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hpgvx Ptr CInt
itypePtr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
bpPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Float,
     Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), 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/chprfs.f>
hprfs ::
   Char {- ^ uplo -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt (Complex Float) {- ^ afp -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
hprfs :: Char
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
hprfs Char
uplo Array ZeroInt (Complex Float)
ap Array ZeroInt (Complex Float)
afp Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
x = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let afpDim0 :: Int
afpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
afp
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x
   let n :: Int
n = Int
ipivDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"hprfs: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"hprfs: n*(n+1)`div`2 == afpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afpDim0)
   String -> Bool -> IO ()
Call.assert String
"hprfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
afpPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
afp
      Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.hprfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
afpPtr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/chpsv.f>
hpsv ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Array ZeroInt CInt, Int)
hpsv :: Char
-> Int
-> IOArray ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt CInt, Int)
hpsv Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"hpsv: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hpsv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
apPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/chpsvx.f>
hpsvx ::
   Char {- ^ fact -} ->
   Char {- ^ uplo -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   IOArray ZeroInt (Complex Float) {- ^ afp -} ->
   IOArray ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)
hpsvx :: Char
-> Char
-> Array ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
hpsvx Char
fact Char
uplo Array ZeroInt (Complex Float)
ap IOArray ZeroInt (Complex Float)
afp IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Float)
b Int
ldx = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let afpDim0 :: Int
afpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
afp
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
ipivDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"hpsvx: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"hpsvx: n*(n+1)`div`2 == afpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afpDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
factPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
afpPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
afp
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
rcondPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.hpsvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
afpPtr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
     Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
         IO
  (Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO
  (Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array 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/chptrd.f>
hptrd ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt (Complex Float), Int)
hptrd :: Char
-> Int
-> IOArray ZeroInt (Complex Float)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
hptrd Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"hptrd: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   ContT
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Int)
 -> IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.hptrd Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr Float
dPtr Ptr Float
ePtr Ptr (Complex Float)
tauPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Array ZeroInt (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float,
     Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
         IO
  (Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
         IO
  (Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO
  (Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex 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/chptrf.f>
hptrf ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   IO (Array ZeroInt CInt, Int)
hptrf :: Char
-> Int
-> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt CInt, Int)
hptrf Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"hptrf: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt -> Ptr (Complex Float) -> Ptr CInt -> Ptr CInt -> IO ()
FFI.hptrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
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/chptri.f>
hptri ::
   Char {- ^ uplo -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IO (Int)
hptri :: Char
-> IOArray ZeroInt (Complex Float) -> Array ZeroInt CInt -> IO Int
hptri Char
uplo IOArray ZeroInt (Complex Float)
ap Array ZeroInt CInt
ipiv = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
ipivDim0
   String -> Bool -> IO ()
Call.assert String
"hptri: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.hptri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/chptrs.f>
hptrs ::
   Char {- ^ uplo -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
hptrs :: Char
-> Array ZeroInt (Complex Float)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
hptrs Char
uplo Array ZeroInt (Complex Float)
ap Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
ipivDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"hptrs: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hptrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
apPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/chsein.f>
hsein ::
   Char {- ^ side -} ->
   Char {- ^ eigsrc -} ->
   Char {- ^ initv -} ->
   Array ZeroInt Bool {- ^ select -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->
   IOArray ZeroInt (Complex Float) {- ^ w -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ vl -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ vr -} ->
   IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
hsein :: Char
-> Char
-> Char
-> Array ZeroInt Bool
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
hsein Char
side Char
eigsrc Char
initv Array ZeroInt Bool
select Array (ZeroInt, ZeroInt) (Complex Float)
h IOArray ZeroInt (Complex Float)
w IOArray (ZeroInt, ZeroInt) (Complex Float)
vl IOArray (ZeroInt, ZeroInt) (Complex Float)
vr = do
   let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Bool -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Bool
select
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
h
   let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
w
   let (Int
vlDim0,Int
vlDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
vl
   let (Int
vrDim0,Int
vrDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
vr
   let n :: Int
n = Int
selectDim0
   let ldh :: Int
ldh = Int
hDim1
   let mm :: Int
mm = Int
vlDim0
   let ldvl :: Int
ldvl = Int
vlDim1
   let ldvr :: Int
ldvr = Int
vrDim1
   String -> Bool -> IO ()
Call.assert String
"hsein: n == hDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
hDim0)
   String -> Bool -> IO ()
Call.assert String
"hsein: n == wDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
   String -> Bool -> IO ()
Call.assert String
"hsein: mm == vrDim0" (Int
mm Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vrDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
ifaill <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
   IOArray ZeroInt CInt
ifailr <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
   ContT
  (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
 -> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
eigsrcPtr <- Char
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
eigsrc
      Ptr CChar
initvPtr <- Char
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
initv
      Ptr Bool
selectPtr <- Array ZeroInt Bool
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr Bool)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Bool
select
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
hPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
h
      Ptr CInt
ldhPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr (Complex Float)
wPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
w
      Ptr (Complex Float)
vlPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vl
      Ptr CInt
ldvlPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
      Ptr (Complex Float)
vrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vr
      Ptr CInt
ldvrPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
      Ptr CInt
mmPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mm
      Ptr CInt
mPtr <- FortranIO
  (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
ifaillPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifaill
      Ptr CInt
ifailrPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifailr
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) IO ())
-> IO ()
-> ContT (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hsein Ptr CChar
sidePtr Ptr CChar
eigsrcPtr Ptr CChar
initvPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr (Complex Float)
hPtr Ptr CInt
ldhPtr Ptr (Complex Float)
wPtr Ptr (Complex Float)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Float)
vrPtr Ptr CInt
ldvrPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
ifaillPtr Ptr CInt
ifailrPtr Ptr CInt
infoPtr
      IO (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt CInt, Array ZeroInt CInt, Int)
forall (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/chseqr.f>
hseqr ::
   Char {- ^ job -} ->
   Char {- ^ compz -} ->
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Int)
hseqr :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt (Complex Float), Int)
hseqr Char
job Char
compz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) (Complex Float)
h IOArray (ZeroInt, ZeroInt) (Complex Float)
z Int
lwork = do
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
h
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let n :: Int
n = Int
hDim0
   let ldh :: Int
ldh = Int
hDim1
   let ldz :: Int
ldz = Int
zDim1
   String -> Bool -> IO ()
Call.assert String
"hseqr: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt (Complex Float)
w <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobPtr <- Char -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
      Ptr CChar
compzPtr <- Char -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr (Complex Float)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
h
      Ptr CInt
ldhPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr (Complex Float)
wPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.hseqr Ptr CChar
jobPtr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Float)
hPtr Ptr CInt
ldhPtr Ptr (Complex Float)
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
w
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/ilaclc.f>
ilalc ::
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO CInt
ilalc :: Int -> Array (ZeroInt, ZeroInt) (Complex Float) -> IO CInt
ilalc Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   ContT CInt IO CInt -> IO CInt
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT CInt IO CInt -> IO CInt) -> ContT CInt IO CInt -> IO CInt
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO CInt (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      IO CInt -> ContT CInt IO CInt
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO CInt -> ContT CInt IO CInt) -> IO CInt -> ContT CInt IO CInt
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr CInt -> Ptr (Complex Float) -> Ptr CInt -> IO CInt
FFI.ilalc Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ilaclr.f>
ilalr ::
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO CInt
ilalr :: Int -> Array (ZeroInt, ZeroInt) (Complex Float) -> IO CInt
ilalr Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   ContT CInt IO CInt -> IO CInt
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT CInt IO CInt -> IO CInt) -> ContT CInt IO CInt -> IO CInt
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO CInt (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      IO CInt -> ContT CInt IO CInt
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO CInt -> ContT CInt IO CInt) -> IO CInt -> ContT CInt IO CInt
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr CInt -> Ptr (Complex Float) -> Ptr CInt -> IO CInt
FFI.ilalr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/icmax1.f>
imax1 ::
   Array ZeroInt (Complex Float) {- ^ cx -} ->
   Int {- ^ incx -} ->
   IO CInt
imax1 :: Array ZeroInt (Complex Float) -> Int -> IO CInt
imax1 Array ZeroInt (Complex Float)
cx Int
incx = do
   let cxDim0 :: Int
cxDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
cx
   let n :: Int
n = Int
cxDim0
   ContT CInt IO CInt -> IO CInt
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT CInt IO CInt -> IO CInt) -> ContT CInt IO CInt -> IO CInt
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
cxPtr <- Array ZeroInt (Complex Float)
-> FortranIO CInt (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
cx
      Ptr CInt
incxPtr <- Int -> FortranIO CInt (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      IO CInt -> ContT CInt IO CInt
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO CInt -> ContT CInt IO CInt) -> IO CInt -> ContT CInt IO CInt
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr (Complex Float) -> Ptr CInt -> IO CInt
FFI.imax1 Ptr CInt
nPtr Ptr (Complex Float)
cxPtr Ptr CInt
incxPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clabrd.f>
labrd ::
   Int {- ^ m -} ->
   Int {- ^ nb -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ ldx -} ->
   Int {- ^ ldy -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float))
labrd :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
labrd Int
m Int
nb IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
ldx Int
ldy = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
d <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
   IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
   IOArray ZeroInt (Complex Float)
tauq <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
   IOArray ZeroInt (Complex Float)
taup <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
   IOArray (ZeroInt, ZeroInt) (Complex Float)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldx
   IOArray (ZeroInt, ZeroInt) (Complex Float)
y <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldy
   ContT
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
  IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
   IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
 -> IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
tauqPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tauq
      Ptr (Complex Float)
taupPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
taup
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr (Complex Float)
yPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
y
      Ptr CInt
ldyPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldy
      IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.labrd Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
nbPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
dPtr Ptr Float
ePtr Ptr (Complex Float)
tauqPtr Ptr (Complex Float)
taupPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr (Complex Float)
yPtr Ptr CInt
ldyPtr
      IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> (Array ZeroInt Float, Array ZeroInt Float,
     Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
d
         IO
  (Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tauq
         IO
  (Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
taup
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
y

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacgv.f>
lacgv ::
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ x -} ->
   Int {- ^ incx -} ->
   IO ()
lacgv :: Int -> IOArray ZeroInt (Complex Float) -> Int -> IO ()
lacgv Int
n IOArray ZeroInt (Complex Float)
x Int
incx = do
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
x
   let _xSize :: Int
_xSize = Int
xDim0
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
xPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
x
      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 (Complex Float) -> Ptr CInt -> IO ()
FFI.lacgv Ptr CInt
nPtr Ptr (Complex Float)
xPtr Ptr CInt
incxPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacn2.f>
lacn2 ::
   IOArray ZeroInt (Complex Float) {- ^ x -} ->
   Float {- ^ est -} ->
   Int {- ^ kase -} ->
   IOArray ZeroInt CInt {- ^ isave -} ->
   IO (Array ZeroInt (Complex Float), Float, Int)
lacn2 :: IOArray ZeroInt (Complex Float)
-> Float
-> Int
-> IOArray ZeroInt CInt
-> IO (Array ZeroInt (Complex Float), Float, Int)
lacn2 IOArray ZeroInt (Complex Float)
x Float
est Int
kase IOArray ZeroInt CInt
isave = do
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
x
   let isaveDim0 :: Int
isaveDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
isave
   let n :: Int
n = Int
xDim0
   String -> Bool -> IO ()
Call.assert String
"lacn2: 3 == isaveDim0" (Int
3 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
isaveDim0)
   IOArray ZeroInt (Complex Float)
v <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt (Complex Float), Float, Int)
  IO
  (Array ZeroInt (Complex Float), Float, Int)
-> IO (Array ZeroInt (Complex Float), Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Float, Int)
   IO
   (Array ZeroInt (Complex Float), Float, Int)
 -> IO (Array ZeroInt (Complex Float), Float, Int))
-> ContT
     (Array ZeroInt (Complex Float), Float, Int)
     IO
     (Array ZeroInt (Complex Float), Float, Int)
-> IO (Array ZeroInt (Complex Float), Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt (Complex Float), Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
vPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
v
      Ptr (Complex Float)
xPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
x
      Ptr Float
estPtr <- Float
-> FortranIO
     (Array ZeroInt (Complex Float), Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
est
      Ptr CInt
kasePtr <- Int
-> FortranIO (Array ZeroInt (Complex Float), Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kase
      Ptr CInt
isavePtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt (Complex Float), Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isave
      IO () -> ContT (Array ZeroInt (Complex Float), Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lacn2 Ptr CInt
nPtr Ptr (Complex Float)
vPtr Ptr (Complex Float)
xPtr Ptr Float
estPtr Ptr CInt
kasePtr Ptr CInt
isavePtr
      IO (Array ZeroInt (Complex Float), Float, Int)
-> ContT
     (Array ZeroInt (Complex Float), Float, Int)
     IO
     (Array ZeroInt (Complex Float), Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Float, Int)
 -> ContT
      (Array ZeroInt (Complex Float), Float, Int)
      IO
      (Array ZeroInt (Complex Float), Float, Int))
-> IO (Array ZeroInt (Complex Float), Float, Int)
-> ContT
     (Array ZeroInt (Complex Float), Float, Int)
     IO
     (Array ZeroInt (Complex Float), Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Float -> Int -> (Array ZeroInt (Complex Float), Float, Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Float -> Int -> (Array ZeroInt (Complex Float), Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt (Complex Float)
   -> Float -> Int -> (Array ZeroInt (Complex Float), Float, Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Float -> Int -> (Array ZeroInt (Complex Float), Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
v
         IO (Float -> Int -> (Array ZeroInt (Complex Float), Float, Int))
-> IO Float
-> IO (Int -> (Array ZeroInt (Complex Float), Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
estPtr
         IO (Int -> (Array ZeroInt (Complex Float), Float, Int))
-> IO Int -> IO (Array ZeroInt (Complex Float), 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
kasePtr)

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

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacp2.f>
lacp2 ::
   Char {- ^ uplo -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->
   Int {- ^ ldb -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float))
lacp2 :: Char
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
lacp2 Char
uplo Int
m Array (ZeroInt, ZeroInt) Float
a Int
ldb = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray (ZeroInt, ZeroInt) (Complex Float)
b <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldb
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float))
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float))
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float))
 -> IO (Array (ZeroInt, ZeroInt) (Complex Float)))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
mPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.lacp2 Ptr CChar
uploPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr
      IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float))
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
b

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacpy.f>
lacpy ::
   Char {- ^ uplo -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ ldb -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float))
lacpy :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
lacpy Char
uplo Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a Int
ldb = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray (ZeroInt, ZeroInt) (Complex Float)
b <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldb
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float))
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float))
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float))
 -> IO (Array (ZeroInt, ZeroInt) (Complex Float)))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
mPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.lacpy Ptr CChar
uploPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr
      IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float))
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
b

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacrm.f>
lacrm ::
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array (ZeroInt,ZeroInt) Float {- ^ b -} ->
   Int {- ^ ldc -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float))
lacrm :: Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
lacrm Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a Array (ZeroInt, ZeroInt) Float
b Int
ldc = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"lacrm: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
c <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldc
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float))
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float))
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float))
 -> IO (Array (ZeroInt, ZeroInt) (Complex Float)))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
bPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> IO ()
FFI.lacrm Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr Float
rworkPtr
      IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float))
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
c

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacrt.f>
lacrt ::
   IOArray ZeroInt (Complex Float) {- ^ cx -} ->
   Int {- ^ incx -} ->
   IOArray ZeroInt (Complex Float) {- ^ cy -} ->
   Int {- ^ incy -} ->
   Complex Float {- ^ c -} ->
   Complex Float {- ^ s -} ->
   IO ()
lacrt :: IOArray ZeroInt (Complex Float)
-> Int
-> IOArray ZeroInt (Complex Float)
-> Int
-> Complex Float
-> Complex Float
-> IO ()
lacrt IOArray ZeroInt (Complex Float)
cx Int
incx IOArray ZeroInt (Complex Float)
cy Int
incy Complex Float
c Complex Float
s = do
   let cxDim0 :: Int
cxDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
cx
   let cyDim0 :: Int
cyDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
cy
   let n :: Int
n = Int
cxDim0
   String -> Bool -> IO ()
Call.assert String
"lacrt: n == cyDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cyDim0)
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
cxPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
cx
      Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr (Complex Float)
cyPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
cy
      Ptr CInt
incyPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
      Ptr (Complex Float)
cPtr <- Complex Float -> FortranIO () (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
c
      Ptr (Complex Float)
sPtr <- Complex Float -> FortranIO () (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
s
      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 (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> IO ()
FFI.lacrt Ptr CInt
nPtr Ptr (Complex Float)
cxPtr Ptr CInt
incxPtr Ptr (Complex Float)
cyPtr Ptr CInt
incyPtr Ptr (Complex Float)
cPtr Ptr (Complex Float)
sPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claed0.f>
laed0 ::
   Int {- ^ qsiz -} ->
   IOArray ZeroInt Float {- ^ d -} ->
   IOArray ZeroInt Float {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->
   Int {- ^ ldqs -} ->
   Int {- ^ rworkSize -} ->
   Int {- ^ iworkSize -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)
laed0 :: Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
laed0 Int
qsiz IOArray ZeroInt Float
d IOArray ZeroInt Float
e IOArray (ZeroInt, ZeroInt) (Complex Float)
q Int
ldqs Int
rworkSize Int
iworkSize = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
   let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
q
   let n :: Int
n = Int
dDim0
   let ldq :: Int
ldq = Int
qDim1
   String -> Bool -> IO ()
Call.assert String
"laed0: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"laed0: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
qstore <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldqs
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
iworkSize
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
qsizPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
qsiz
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr (Complex Float)
qstorePtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
qstore
      Ptr CInt
ldqsPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldqs
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed0 Ptr CInt
qsizPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr (Complex Float)
qstorePtr Ptr CInt
ldqsPtr Ptr Float
rworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
qstore
         IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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/claed7.f>
laed7 ::
   Int {- ^ cutpnt -} ->
   Int {- ^ qsiz -} ->
   Int {- ^ tlvls -} ->
   Int {- ^ curlvl -} ->
   Int {- ^ curpbm -} ->
   IOArray ZeroInt Float {- ^ d -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->
   Float {- ^ rho -} ->
   IOArray ZeroInt Float {- ^ qstore -} ->
   IOArray ZeroInt CInt {- ^ qptr -} ->
   Array ZeroInt CInt {- ^ prmptr -} ->
   Array ZeroInt CInt {- ^ perm -} ->
   Array ZeroInt CInt {- ^ givptr -} ->
   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->
   Array (ZeroInt,ZeroInt) Float {- ^ givnum -} ->
   Int {- ^ rworkSize -} ->
   IO (Array ZeroInt CInt, Int)
laed7 :: Int
-> Int
-> Int
-> Int
-> Int
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Int
-> IO (Array ZeroInt CInt, Int)
laed7 Int
cutpnt Int
qsiz Int
tlvls Int
curlvl Int
curpbm IOArray ZeroInt Float
d IOArray (ZeroInt, ZeroInt) (Complex Float)
q Float
rho IOArray ZeroInt Float
qstore IOArray ZeroInt CInt
qptr Array ZeroInt CInt
prmptr Array ZeroInt CInt
perm Array ZeroInt CInt
givptr Array (ZeroInt, ZeroInt) CInt
givcol Array (ZeroInt, ZeroInt) Float
givnum Int
rworkSize = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
   let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
q
   let qstoreDim0 :: Int
qstoreDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
qstore
   let qptrDim0 :: Int
qptrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
qptr
   let prmptrDim0 :: Int
prmptrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
prmptr
   let permDim0 :: Int
permDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
perm
   let givptrDim0 :: Int
givptrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
givptr
   let (Int
givcolDim0,Int
givcolDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) CInt -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) CInt
givcol
   let (Int
givnumDim0,Int
givnumDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
givnum
   let n :: Int
n = Int
dDim0
   let ldq :: Int
ldq = Int
qDim1
   let nlgn :: Int
nlgn = Int
prmptrDim0
   String -> Bool -> IO ()
Call.assert String
"laed7: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   String -> Bool -> IO ()
Call.assert String
"laed7: n^!2+1 == qstoreDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> Int -> a
^!Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qstoreDim0)
   String -> Bool -> IO ()
Call.assert String
"laed7: n+2 == qptrDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qptrDim0)
   String -> Bool -> IO ()
Call.assert String
"laed7: nlgn == permDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
permDim0)
   String -> Bool -> IO ()
Call.assert String
"laed7: nlgn == givptrDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givptrDim0)
   String -> Bool -> IO ()
Call.assert String
"laed7: nlgn == givcolDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givcolDim0)
   String -> Bool -> IO ()
Call.assert String
"laed7: 2 == givcolDim1" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givcolDim1)
   String -> Bool -> IO ()
Call.assert String
"laed7: nlgn == givnumDim0" (Int
nlgn Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givnumDim0)
   String -> Bool -> IO ()
Call.assert String
"laed7: 2 == givnumDim1" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givnumDim1)
   IOArray ZeroInt CInt
indxq <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
qsizInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
cutpntPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
cutpnt
      Ptr CInt
qsizPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
qsiz
      Ptr CInt
tlvlsPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
tlvls
      Ptr CInt
curlvlPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
curlvl
      Ptr CInt
curpbmPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
curpbm
      Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Float
rhoPtr <- Float -> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rho
      Ptr CInt
indxqPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indxq
      Ptr Float
qstorePtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
qstore
      Ptr CInt
qptrPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
qptr
      Ptr CInt
prmptrPtr <- Array ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
prmptr
      Ptr CInt
permPtr <- Array ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
perm
      Ptr CInt
givptrPtr <- Array ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
givptr
      Ptr CInt
givcolPtr <- Array (ZeroInt, ZeroInt) CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) CInt
givcol
      Ptr Float
givnumPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
givnum
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt CInt, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laed7 Ptr CInt
nPtr Ptr CInt
cutpntPtr Ptr CInt
qsizPtr Ptr CInt
tlvlsPtr Ptr CInt
curlvlPtr Ptr CInt
curpbmPtr Ptr Float
dPtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr Float
rhoPtr Ptr CInt
indxqPtr Ptr Float
qstorePtr Ptr CInt
qptrPtr Ptr CInt
prmptrPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr Float
givnumPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr 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/claed8.f>
laed8 ::
   Int {- ^ qsiz -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->
   IOArray ZeroInt Float {- ^ d -} ->
   Float {- ^ rho -} ->
   Int {- ^ cutpnt -} ->
   Array ZeroInt Float {- ^ z -} ->
   Int {- ^ ldq2 -} ->
   Array ZeroInt CInt {- ^ indxq -} ->
   IO (Int, Float, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt Float, Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int, Array (ZeroInt,ZeroInt) CInt, Array (ZeroInt,ZeroInt) Float, Int)
laed8 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt Float
-> Float
-> Int
-> Array ZeroInt Float
-> Int
-> Array ZeroInt CInt
-> IO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
laed8 Int
qsiz IOArray (ZeroInt, ZeroInt) (Complex Float)
q IOArray ZeroInt Float
d Float
rho Int
cutpnt Array ZeroInt Float
z Int
ldq2 Array ZeroInt CInt
indxq = do
   let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
q
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
   let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
z
   let indxqDim0 :: Int
indxqDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
indxq
   let n :: Int
n = Int
qDim0
   let ldq :: Int
ldq = Int
qDim1
   String -> Bool -> IO ()
Call.assert String
"laed8: n == dDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
   String -> Bool -> IO ()
Call.assert String
"laed8: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   String -> Bool -> IO ()
Call.assert String
"laed8: n == indxqDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
indxqDim0)
   IOArray ZeroInt Float
dlamda <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
q2 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq2
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
indxp <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
indx <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
perm <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) CInt
givcol <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) CInt)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
2
   IOArray (ZeroInt, ZeroInt) Float
givnum <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) Float)
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
2
   ContT
  (Int, Float, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
  IO
  (Int, Float, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
-> IO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Float, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
    Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
    Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
   IO
   (Int, Float, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
    Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
    Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
 -> IO
      (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
       Int))
-> ContT
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     IO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
-> IO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
kPtr <- FortranIO
  (Int, Float, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
qsizPtr <- Int
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
qsiz
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
rhoPtr <- Float
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rho
      Ptr CInt
cutpntPtr <- Int
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
cutpnt
      Ptr Float
zPtr <- Array ZeroInt Float
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
z
      Ptr Float
dlamdaPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dlamda
      Ptr (Complex Float)
q2Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q2
      Ptr CInt
ldq2Ptr <- Int
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq2
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr CInt
indxpPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indxp
      Ptr CInt
indxPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
indx
      Ptr CInt
indxqPtr <- Array ZeroInt CInt
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
indxq
      Ptr CInt
permPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
perm
      Ptr CInt
givptrPtr <- FortranIO
  (Int, Float, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
givcolPtr <- IOArray (ZeroInt, ZeroInt) CInt
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) CInt
givcol
      Ptr Float
givnumPtr <- IOArray (ZeroInt, ZeroInt) Float
-> FortranIO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) Float
givnum
      Ptr CInt
infoPtr <- FortranIO
  (Int, Float, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laed8 Ptr CInt
kPtr Ptr CInt
nPtr Ptr CInt
qsizPtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr Float
dPtr Ptr Float
rhoPtr Ptr CInt
cutpntPtr Ptr Float
zPtr Ptr Float
dlamdaPtr Ptr (Complex Float)
q2Ptr Ptr CInt
ldq2Ptr Ptr Float
wPtr Ptr CInt
indxpPtr Ptr CInt
indxPtr Ptr CInt
indxqPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr Float
givnumPtr Ptr CInt
infoPtr
      IO
  (Int, Float, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
   Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
   Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     IO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Float, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
    Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
    Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
 -> ContT
      (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
      IO
      (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
       Int))
-> IO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
-> ContT
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
     IO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Float
 -> Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array ZeroInt Float
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Array ZeroInt CInt
 -> Int
 -> Array (ZeroInt, ZeroInt) CInt
 -> Array (ZeroInt, ZeroInt) Float
 -> Int
 -> (Int, Float, Array ZeroInt Float,
     Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
     Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
     Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
     Int))
-> IO
     (Int
      -> Float
      -> Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt Float
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Float
      -> Int
      -> (Int, Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,,,,,)
         IO
  (Int
   -> Float
   -> Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt Float
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Float
   -> Int
   -> (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
       Int))
-> IO Int
-> IO
     (Float
      -> Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt Float
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Float
      -> Int
      -> (Int, Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, 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
kPtr)
         IO
  (Float
   -> Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt Float
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Float
   -> Int
   -> (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
       Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt Float
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Float
      -> Int
      -> (Int, Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rhoPtr
         IO
  (Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt Float
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Float
   -> Int
   -> (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt Float
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Float
      -> Int
      -> (Int, Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
dlamda
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt Float
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Float
   -> Int
   -> (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
       Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Float
      -> Int
      -> (Int, Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
q2
         IO
  (Array ZeroInt Float
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Float
   -> Int
   -> (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Float
      -> Int
      -> (Int, Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Float
   -> Int
   -> (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
       Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Float
      -> Int
      -> (Int, Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
          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
   -> Array ZeroInt CInt
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Float
   -> Int
   -> (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
       Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array ZeroInt CInt
      -> Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Float
      -> Int
      -> (Int, Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
          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
   -> Int
   -> Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Float
   -> Int
   -> (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
       Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Float
      -> Int
      -> (Int, Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
          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) Float
   -> Int
   -> (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
       Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) CInt
      -> Array (ZeroInt, ZeroInt) Float
      -> Int
      -> (Int, Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, 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
givptrPtr)
         IO
  (Array (ZeroInt, ZeroInt) CInt
   -> Array (ZeroInt, ZeroInt) Float
   -> Int
   -> (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
       Int))
-> IO (Array (ZeroInt, ZeroInt) CInt)
-> IO
     (Array (ZeroInt, ZeroInt) Float
      -> Int
      -> (Int, Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
          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) Float
   -> Int
   -> (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
       Int))
-> IO (Array (ZeroInt, ZeroInt) Float)
-> IO
     (Int
      -> (Int, Float, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
          Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
          Array (ZeroInt, ZeroInt) CInt, 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
givnum
         IO
  (Int
   -> (Int, Float, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
       Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
       Array (ZeroInt, ZeroInt) CInt, Array (ZeroInt, ZeroInt) Float,
       Int))
-> IO Int
-> IO
     (Int, Float, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt Float,
      Array ZeroInt CInt, Array ZeroInt CInt, Array ZeroInt CInt, Int,
      Array (ZeroInt, ZeroInt) CInt, 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/claein.f>
laein ::
   Bool {- ^ rightv -} ->
   Bool {- ^ noinit -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->
   Complex Float {- ^ w -} ->
   IOArray ZeroInt (Complex Float) {- ^ v -} ->
   Int {- ^ ldb -} ->
   Float {- ^ eps3 -} ->
   Float {- ^ smlnum -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)
laein :: Bool
-> Bool
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Complex Float
-> IOArray ZeroInt (Complex Float)
-> Int
-> Float
-> Float
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
laein Bool
rightv Bool
noinit Array (ZeroInt, ZeroInt) (Complex Float)
h Complex Float
w IOArray ZeroInt (Complex Float)
v Int
ldb Float
eps3 Float
smlnum = do
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
h
   let vDim0 :: Int
vDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
v
   let n :: Int
n = Int
hDim0
   let ldh :: Int
ldh = Int
hDim1
   String -> Bool -> IO ()
Call.assert String
"laein: n == vDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
b <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldb
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
rightvPtr <- Bool
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
rightv
      Ptr Bool
noinitPtr <- Bool
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
noinit
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
hPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
h
      Ptr CInt
ldhPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr (Complex Float)
wPtr <- Complex Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
w
      Ptr (Complex Float)
vPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
v
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr Float
eps3Ptr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
eps3
      Ptr Float
smlnumPtr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
smlnum
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.laein Ptr Bool
rightvPtr Ptr Bool
noinitPtr Ptr CInt
nPtr Ptr (Complex Float)
hPtr Ptr CInt
ldhPtr Ptr (Complex Float)
wPtr Ptr (Complex Float)
vPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr Float
rworkPtr Ptr Float
eps3Ptr Ptr Float
smlnumPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
         IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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/claesy.f>
laesy ::
   Complex Float {- ^ a -} ->
   Complex Float {- ^ b -} ->
   Complex Float {- ^ c -} ->
   IO (Complex Float, Complex Float, Complex Float, Complex Float, Complex Float)
laesy :: Complex Float
-> Complex Float
-> Complex Float
-> IO
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
laesy Complex Float
a Complex Float
b Complex Float
c = do
   ContT
  (Complex Float, Complex Float, Complex Float, Complex Float,
   Complex Float)
  IO
  (Complex Float, Complex Float, Complex Float, Complex Float,
   Complex Float)
-> IO
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Complex Float, Complex Float, Complex Float, Complex Float,
    Complex Float)
   IO
   (Complex Float, Complex Float, Complex Float, Complex Float,
    Complex Float)
 -> IO
      (Complex Float, Complex Float, Complex Float, Complex Float,
       Complex Float))
-> ContT
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
     IO
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
-> IO
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
forall a b. (a -> b) -> a -> b
$ do
      Ptr (Complex Float)
aPtr <- Complex Float
-> FortranIO
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
     (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
a
      Ptr (Complex Float)
bPtr <- Complex Float
-> FortranIO
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
     (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
b
      Ptr (Complex Float)
cPtr <- Complex Float
-> FortranIO
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
     (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
c
      Ptr (Complex Float)
rt1Ptr <- FortranIO
  (Complex Float, Complex Float, Complex Float, Complex Float,
   Complex Float)
  (Ptr (Complex Float))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
rt2Ptr <- FortranIO
  (Complex Float, Complex Float, Complex Float, Complex Float,
   Complex Float)
  (Ptr (Complex Float))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
evscalPtr <- FortranIO
  (Complex Float, Complex Float, Complex Float, Complex Float,
   Complex Float)
  (Ptr (Complex Float))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
cs1Ptr <- FortranIO
  (Complex Float, Complex Float, Complex Float, Complex Float,
   Complex Float)
  (Ptr (Complex Float))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
sn1Ptr <- FortranIO
  (Complex Float, Complex Float, Complex Float, Complex Float,
   Complex Float)
  (Ptr (Complex Float))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Complex Float, Complex Float, Complex Float, Complex Float,
       Complex Float)
      IO
      ())
-> IO ()
-> ContT
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> IO ()
FFI.laesy Ptr (Complex Float)
aPtr Ptr (Complex Float)
bPtr Ptr (Complex Float)
cPtr Ptr (Complex Float)
rt1Ptr Ptr (Complex Float)
rt2Ptr Ptr (Complex Float)
evscalPtr Ptr (Complex Float)
cs1Ptr Ptr (Complex Float)
sn1Ptr
      IO
  (Complex Float, Complex Float, Complex Float, Complex Float,
   Complex Float)
-> ContT
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
     IO
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Complex Float, Complex Float, Complex Float, Complex Float,
    Complex Float)
 -> ContT
      (Complex Float, Complex Float, Complex Float, Complex Float,
       Complex Float)
      IO
      (Complex Float, Complex Float, Complex Float, Complex Float,
       Complex Float))
-> IO
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
-> ContT
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
     IO
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
forall a b. (a -> b) -> a -> b
$ (Complex Float
 -> Complex Float
 -> Complex Float
 -> Complex Float
 -> Complex Float
 -> (Complex Float, Complex Float, Complex Float, Complex Float,
     Complex Float))
-> IO
     (Complex Float
      -> Complex Float
      -> Complex Float
      -> Complex Float
      -> Complex Float
      -> (Complex Float, Complex Float, Complex Float, Complex Float,
          Complex Float))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Complex Float
   -> Complex Float
   -> Complex Float
   -> Complex Float
   -> Complex Float
   -> (Complex Float, Complex Float, Complex Float, Complex Float,
       Complex Float))
-> IO (Complex Float)
-> IO
     (Complex Float
      -> Complex Float
      -> Complex Float
      -> Complex Float
      -> (Complex Float, Complex Float, Complex Float, Complex Float,
          Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Float) -> IO (Complex Float)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Float)
rt1Ptr
         IO
  (Complex Float
   -> Complex Float
   -> Complex Float
   -> Complex Float
   -> (Complex Float, Complex Float, Complex Float, Complex Float,
       Complex Float))
-> IO (Complex Float)
-> IO
     (Complex Float
      -> Complex Float
      -> Complex Float
      -> (Complex Float, Complex Float, Complex Float, Complex Float,
          Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Float) -> IO (Complex Float)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Float)
rt2Ptr
         IO
  (Complex Float
   -> Complex Float
   -> Complex Float
   -> (Complex Float, Complex Float, Complex Float, Complex Float,
       Complex Float))
-> IO (Complex Float)
-> IO
     (Complex Float
      -> Complex Float
      -> (Complex Float, Complex Float, Complex Float, Complex Float,
          Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Float) -> IO (Complex Float)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Float)
evscalPtr
         IO
  (Complex Float
   -> Complex Float
   -> (Complex Float, Complex Float, Complex Float, Complex Float,
       Complex Float))
-> IO (Complex Float)
-> IO
     (Complex Float
      -> (Complex Float, Complex Float, Complex Float, Complex Float,
          Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Float) -> IO (Complex Float)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Float)
cs1Ptr
         IO
  (Complex Float
   -> (Complex Float, Complex Float, Complex Float, Complex Float,
       Complex Float))
-> IO (Complex Float)
-> IO
     (Complex Float, Complex Float, Complex Float, Complex Float,
      Complex Float)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Float) -> IO (Complex Float)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Float)
sn1Ptr

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

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

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

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clagtm.f>
lagtm ::
   Char {- ^ trans -} ->
   Float {- ^ alpha -} ->
   Array ZeroInt (Complex Float) {- ^ dl -} ->
   Array ZeroInt (Complex Float) {- ^ d -} ->
   Array ZeroInt (Complex Float) {- ^ du -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   Float {- ^ beta -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO ()
lagtm :: Char
-> Float
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO ()
lagtm Char
trans Float
alpha Array ZeroInt (Complex Float)
dl Array ZeroInt (Complex Float)
d Array ZeroInt (Complex Float)
du Array (ZeroInt, ZeroInt) (Complex Float)
x Float
beta IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
dl
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
d
   let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
du
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
x
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
dDim0
   let nrhs :: Int
nrhs = Int
xDim0
   let ldx :: Int
ldx = Int
xDim1
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"lagtm: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
   String -> Bool -> IO ()
Call.assert String
"lagtm: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
   String -> Bool -> IO ()
Call.assert String
"lagtm: nrhs == bDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Float
alphaPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
alpha
      Ptr (Complex Float)
dlPtr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
dl
      Ptr (Complex Float)
dPtr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
d
      Ptr (Complex Float)
duPtr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
du
      Ptr (Complex Float)
xPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
betaPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
beta
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
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 Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.lagtm Ptr CChar
transPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
alphaPtr Ptr (Complex Float)
dlPtr Ptr (Complex Float)
dPtr Ptr (Complex Float)
duPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
betaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clahef.f>
lahef ::
   Char {- ^ uplo -} ->
   Int {- ^ nb -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ ldw -} ->
   IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) (Complex Float), Int)
lahef :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
lahef Char
uplo Int
nb IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
ldw = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
w <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldw
   ContT
  (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  IO
  (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
   IO
   (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> IO
      (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nbPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
      Ptr CInt
kbPtr <- FortranIO
  (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
wPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
w
      Ptr CInt
ldwPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldw
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lahef Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nbPtr Ptr CInt
kbPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
wPtr Ptr CInt
ldwPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> ContT
      (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt CInt
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Int, Array ZeroInt CInt,
     Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Int
      -> Array ZeroInt CInt
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Int, Array ZeroInt CInt,
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Int
   -> Array ZeroInt CInt
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Int, Array ZeroInt CInt,
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt CInt
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Int, Array ZeroInt CInt,
          Array (ZeroInt, ZeroInt) (Complex 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
kbPtr)
         IO
  (Array ZeroInt CInt
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Int, Array ZeroInt CInt,
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Int, Array ZeroInt CInt,
          Array (ZeroInt, ZeroInt) (Complex Float), 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) (Complex Float)
   -> Int
   -> (Int, Array ZeroInt CInt,
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Int, Array ZeroInt CInt,
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
w
         IO
  (Int
   -> (Int, Array ZeroInt CInt,
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex 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/clahqr.f>
lahqr ::
   Bool {- ^ wantt -} ->
   Bool {- ^ wantz -} ->
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->
   Int {- ^ iloz -} ->
   Int {- ^ ihiz -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   IO (Array ZeroInt (Complex Float), Int)
lahqr :: Bool
-> Bool
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt (Complex Float), Int)
lahqr Bool
wantt Bool
wantz Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) (Complex Float)
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) (Complex Float)
z = do
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
h
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let n :: Int
n = Int
hDim0
   let ldh :: Int
ldh = Int
hDim1
   let ldz :: Int
ldz = Int
zDim1
   String -> Bool -> IO ()
Call.assert String
"lahqr: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt (Complex Float)
w <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
wanttPtr <- Bool -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
      Ptr Bool
wantzPtr <- Bool -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr (Complex Float)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
h
      Ptr CInt
ldhPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr (Complex Float)
wPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
w
      Ptr CInt
ilozPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
      Ptr CInt
ihizPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lahqr Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Float)
hPtr Ptr CInt
ldhPtr Ptr (Complex Float)
wPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
w
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/clahr2.f>
lahr2 ::
   Int {- ^ n -} ->
   Int {- ^ k -} ->
   Int {- ^ nb -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ ldt -} ->
   Int {- ^ ldy -} ->
   IO (Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float))
lahr2 :: Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
lahr2 Int
n Int
k Int
nb IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
ldt Int
ldy = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"lahr2: n-k+1 == aDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
kInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nb
   IOArray (ZeroInt, ZeroInt) (Complex Float)
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldt
   IOArray (ZeroInt, ZeroInt) (Complex Float)
y <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldy
   ContT
  (Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
  IO
  (Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
   IO
   (Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
 -> IO
      (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr CInt
nbPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
t
      Ptr CInt
ldtPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr (Complex Float)
yPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
y
      Ptr CInt
ldyPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldy
      IO ()
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.lahr2 Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
nbPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
tPtr Ptr CInt
ldtPtr Ptr (Complex Float)
yPtr Ptr CInt
ldyPtr
      IO
  (Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
 -> ContT
      (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> (Array ZeroInt (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
t
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
y

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claic1.f>
laic1 ::
   Int {- ^ job -} ->
   Array ZeroInt (Complex Float) {- ^ x -} ->
   Float {- ^ sest -} ->
   Array ZeroInt (Complex Float) {- ^ w -} ->
   Complex Float {- ^ gamma -} ->
   IO (Float, Complex Float, Complex Float)
laic1 :: Int
-> Array ZeroInt (Complex Float)
-> Float
-> Array ZeroInt (Complex Float)
-> Complex Float
-> IO (Float, Complex Float, Complex Float)
laic1 Int
job Array ZeroInt (Complex Float)
x Float
sest Array ZeroInt (Complex Float)
w Complex Float
gamma = do
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
x
   let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
w
   let j :: Int
j = Int
xDim0
   String -> Bool -> IO ()
Call.assert String
"laic1: j == wDim0" (Int
j Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
   ContT
  (Float, Complex Float, Complex Float)
  IO
  (Float, Complex Float, Complex Float)
-> IO (Float, Complex Float, Complex Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Float, Complex Float, Complex Float)
   IO
   (Float, Complex Float, Complex Float)
 -> IO (Float, Complex Float, Complex Float))
-> ContT
     (Float, Complex Float, Complex Float)
     IO
     (Float, Complex Float, Complex Float)
-> IO (Float, Complex Float, Complex Float)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
jobPtr <- Int -> FortranIO (Float, Complex Float, Complex Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
job
      Ptr CInt
jPtr <- Int -> FortranIO (Float, Complex Float, Complex Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
j
      Ptr (Complex Float)
xPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Float, Complex Float, Complex Float) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
x
      Ptr Float
sestPtr <- Float
-> FortranIO (Float, Complex Float, Complex Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sest
      Ptr (Complex Float)
wPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Float, Complex Float, Complex Float) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
w
      Ptr (Complex Float)
gammaPtr <- Complex Float
-> FortranIO
     (Float, Complex Float, Complex Float) (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
gamma
      Ptr Float
sestprPtr <- FortranIO (Float, Complex Float, Complex Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
sPtr <- FortranIO
  (Float, Complex Float, Complex Float) (Ptr (Complex Float))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
cPtr <- FortranIO
  (Float, Complex Float, Complex Float) (Ptr (Complex Float))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Complex Float, Complex Float) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Complex Float, Complex Float) IO ())
-> IO () -> ContT (Float, Complex Float, Complex Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> IO ()
FFI.laic1 Ptr CInt
jobPtr Ptr CInt
jPtr Ptr (Complex Float)
xPtr Ptr Float
sestPtr Ptr (Complex Float)
wPtr Ptr (Complex Float)
gammaPtr Ptr Float
sestprPtr Ptr (Complex Float)
sPtr Ptr (Complex Float)
cPtr
      IO (Float, Complex Float, Complex Float)
-> ContT
     (Float, Complex Float, Complex Float)
     IO
     (Float, Complex Float, Complex Float)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Complex Float, Complex Float)
 -> ContT
      (Float, Complex Float, Complex Float)
      IO
      (Float, Complex Float, Complex Float))
-> IO (Float, Complex Float, Complex Float)
-> ContT
     (Float, Complex Float, Complex Float)
     IO
     (Float, Complex Float, Complex Float)
forall a b. (a -> b) -> a -> b
$ (Float
 -> Complex Float
 -> Complex Float
 -> (Float, Complex Float, Complex Float))
-> IO
     (Float
      -> Complex Float
      -> Complex Float
      -> (Float, Complex Float, Complex Float))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Float
   -> Complex Float
   -> Complex Float
   -> (Float, Complex Float, Complex Float))
-> IO Float
-> IO
     (Complex Float
      -> Complex Float -> (Float, Complex Float, Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
sestprPtr
         IO
  (Complex Float
   -> Complex Float -> (Float, Complex Float, Complex Float))
-> IO (Complex Float)
-> IO (Complex Float -> (Float, Complex Float, Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Float) -> IO (Complex Float)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Float)
sPtr
         IO (Complex Float -> (Float, Complex Float, Complex Float))
-> IO (Complex Float) -> IO (Float, Complex Float, Complex Float)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Float) -> IO (Complex Float)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Float)
cPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clals0.f>
lals0 ::
   Int {- ^ icompq -} ->
   Int {- ^ nl -} ->
   Int {- ^ nr -} ->
   Int {- ^ sqre -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldbx -} ->
   Array ZeroInt CInt {- ^ perm -} ->
   Int {- ^ givptr -} ->
   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->
   Array (ZeroInt,ZeroInt) Float {- ^ givnum -} ->
   Array (ZeroInt,ZeroInt) Float {- ^ poles -} ->
   Array ZeroInt Float {- ^ difl -} ->
   Array (ZeroInt,ZeroInt) Float {- ^ difr -} ->
   Array ZeroInt Float {- ^ z -} ->
   Float {- ^ c -} ->
   Float {- ^ s -} ->
   Int {- ^ rworkSize -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)
lals0 :: Int
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Array ZeroInt CInt
-> Int
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Float
-> Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
lals0 Int
icompq Int
nl Int
nr Int
sqre IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
ldbx Array ZeroInt CInt
perm Int
givptr Array (ZeroInt, ZeroInt) CInt
givcol Array (ZeroInt, ZeroInt) Float
givnum Array (ZeroInt, ZeroInt) Float
poles Array ZeroInt Float
difl Array (ZeroInt, ZeroInt) Float
difr Array ZeroInt Float
z Float
c Float
s Int
rworkSize = do
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let permDim0 :: Int
permDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
perm
   let (Int
givcolDim0,Int
givcolDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) CInt -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) CInt
givcol
   let (Int
givnumDim0,Int
givnumDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
givnum
   let (Int
polesDim0,Int
polesDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
poles
   let diflDim0 :: Int
diflDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
difl
   let (Int
difrDim0,Int
difrDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
difr
   let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
z
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let _n :: Int
_n = Int
permDim0
   let ldgcol :: Int
ldgcol = Int
givcolDim1
   let ldgnum :: Int
ldgnum = Int
givnumDim1
   let k :: Int
k = Int
diflDim0
   String -> Bool -> IO ()
Call.assert String
"lals0: 2 == givcolDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givcolDim0)
   String -> Bool -> IO ()
Call.assert String
"lals0: 2 == givnumDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givnumDim0)
   String -> Bool -> IO ()
Call.assert String
"lals0: 2 == polesDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
polesDim0)
   String -> Bool -> IO ()
Call.assert String
"lals0: ldgnum == polesDim1" (Int
ldgnum Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
polesDim1)
   String -> Bool -> IO ()
Call.assert String
"lals0: 2 == difrDim0" (Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
difrDim0)
   String -> Bool -> IO ()
Call.assert String
"lals0: ldgnum == difrDim1" (Int
ldgnum Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
difrDim1)
   String -> Bool -> IO ()
Call.assert String
"lals0: k == zDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
bx <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldbx
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
icompqPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
      Ptr CInt
nlPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nl
      Ptr CInt
nrPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nr
      Ptr CInt
sqrePtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
sqre
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
bxPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
bx
      Ptr CInt
ldbxPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbx
      Ptr CInt
permPtr <- Array ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
perm
      Ptr CInt
givptrPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
givptr
      Ptr CInt
givcolPtr <- Array (ZeroInt, ZeroInt) CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) CInt
givcol
      Ptr CInt
ldgcolPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgcol
      Ptr Float
givnumPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
givnum
      Ptr CInt
ldgnumPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgnum
      Ptr Float
polesPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
poles
      Ptr Float
diflPtr <- Array ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
difl
      Ptr Float
difrPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
difr
      Ptr Float
zPtr <- Array ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
z
      Ptr CInt
kPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr Float
cPtr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
c
      Ptr Float
sPtr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
s
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.lals0 Ptr CInt
icompqPtr Ptr CInt
nlPtr Ptr CInt
nrPtr Ptr CInt
sqrePtr Ptr CInt
nrhsPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
bxPtr Ptr CInt
ldbxPtr Ptr CInt
permPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr CInt
ldgcolPtr Ptr Float
givnumPtr Ptr CInt
ldgnumPtr Ptr Float
polesPtr Ptr Float
diflPtr Ptr Float
difrPtr Ptr Float
zPtr Ptr CInt
kPtr Ptr Float
cPtr Ptr Float
sPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
bx
         IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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/clalsa.f>
lalsa ::
   Int {- ^ icompq -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldbx -} ->
   Array (ZeroInt,ZeroInt) Float {- ^ u -} ->
   Array (ZeroInt,ZeroInt) Float {- ^ vt -} ->
   Array ZeroInt CInt {- ^ k -} ->
   Array (ZeroInt,ZeroInt) Float {- ^ difl -} ->
   Array (ZeroInt,ZeroInt) Float {- ^ difr -} ->
   Array (ZeroInt,ZeroInt) Float {- ^ z -} ->
   Array (ZeroInt,ZeroInt) Float {- ^ poles -} ->
   Array ZeroInt CInt {- ^ givptr -} ->
   Array (ZeroInt,ZeroInt) CInt {- ^ givcol -} ->
   Array (ZeroInt,ZeroInt) CInt {- ^ perm -} ->
   Array (ZeroInt,ZeroInt) Float {- ^ givnum -} ->
   Array ZeroInt Float {- ^ c -} ->
   Array ZeroInt Float {- ^ s -} ->
   Int {- ^ rworkSize -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)
lalsa :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) CInt
-> Array (ZeroInt, ZeroInt) Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
lalsa Int
icompq IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
ldbx Array (ZeroInt, ZeroInt) Float
u Array (ZeroInt, ZeroInt) Float
vt Array ZeroInt CInt
k Array (ZeroInt, ZeroInt) Float
difl Array (ZeroInt, ZeroInt) Float
difr Array (ZeroInt, ZeroInt) Float
z Array (ZeroInt, ZeroInt) Float
poles Array ZeroInt CInt
givptr Array (ZeroInt, ZeroInt) CInt
givcol Array (ZeroInt, ZeroInt) CInt
perm Array (ZeroInt, ZeroInt) Float
givnum Array ZeroInt Float
c Array ZeroInt Float
s Int
rworkSize = do
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
uDim0,Int
uDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
u
   let (Int
vtDim0,Int
vtDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
vt
   let kDim0 :: Int
kDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
k
   let (Int
diflDim0,Int
diflDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
difl
   let (Int
difrDim0,Int
difrDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
difr
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
z
   let (Int
polesDim0,Int
polesDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
poles
   let givptrDim0 :: Int
givptrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
givptr
   let (Int
givcolDim0,Int
givcolDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) CInt -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) CInt
givcol
   let (Int
permDim0,Int
permDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) CInt -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) CInt
perm
   let (Int
givnumDim0,Int
givnumDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
givnum
   let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
c
   let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
s
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let smlsiz :: Int
smlsiz = Int
uDim0
   let ldu :: Int
ldu = Int
uDim1
   let n :: Int
n = Int
kDim0
   let nlvl :: Int
nlvl = Int
diflDim0
   let ldgcol :: Int
ldgcol = Int
givcolDim1
   String -> Bool -> IO ()
Call.assert String
"lalsa: smlsiz+1 == vtDim0" (Int
smlsizInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vtDim0)
   String -> Bool -> IO ()
Call.assert String
"lalsa: ldu == vtDim1" (Int
ldu Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vtDim1)
   String -> Bool -> IO ()
Call.assert String
"lalsa: ldu == diflDim1" (Int
ldu Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
diflDim1)
   String -> Bool -> IO ()
Call.assert String
"lalsa: 2*nlvl == difrDim0" (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nlvl Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
difrDim0)
   String -> Bool -> IO ()
Call.assert String
"lalsa: ldu == difrDim1" (Int
ldu Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
difrDim1)
   String -> Bool -> IO ()
Call.assert String
"lalsa: nlvl == zDim0" (Int
nlvl Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   String -> Bool -> IO ()
Call.assert String
"lalsa: ldu == zDim1" (Int
ldu Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim1)
   String -> Bool -> IO ()
Call.assert String
"lalsa: 2*nlvl == polesDim0" (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nlvl Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
polesDim0)
   String -> Bool -> IO ()
Call.assert String
"lalsa: ldu == polesDim1" (Int
ldu Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
polesDim1)
   String -> Bool -> IO ()
Call.assert String
"lalsa: n == givptrDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givptrDim0)
   String -> Bool -> IO ()
Call.assert String
"lalsa: 2*nlvl == givcolDim0" (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nlvl Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givcolDim0)
   String -> Bool -> IO ()
Call.assert String
"lalsa: nlvl == permDim0" (Int
nlvl Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
permDim0)
   String -> Bool -> IO ()
Call.assert String
"lalsa: ldgcol == permDim1" (Int
ldgcol Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
permDim1)
   String -> Bool -> IO ()
Call.assert String
"lalsa: 2*nlvl == givnumDim0" (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nlvl Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givnumDim0)
   String -> Bool -> IO ()
Call.assert String
"lalsa: ldu == givnumDim1" (Int
ldu Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
givnumDim1)
   String -> Bool -> IO ()
Call.assert String
"lalsa: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
   String -> Bool -> IO ()
Call.assert String
"lalsa: n == sDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
bx <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldbx
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
icompqPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
icompq
      Ptr CInt
smlsizPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
smlsiz
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
bxPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
bx
      Ptr CInt
ldbxPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldbx
      Ptr Float
uPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
u
      Ptr CInt
lduPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr Float
vtPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
vt
      Ptr CInt
kPtr <- Array ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
k
      Ptr Float
diflPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
difl
      Ptr Float
difrPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
difr
      Ptr Float
zPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
z
      Ptr Float
polesPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
poles
      Ptr CInt
givptrPtr <- Array ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
givptr
      Ptr CInt
givcolPtr <- Array (ZeroInt, ZeroInt) CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) CInt
givcol
      Ptr CInt
ldgcolPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldgcol
      Ptr CInt
permPtr <- Array (ZeroInt, ZeroInt) CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) CInt
perm
      Ptr Float
givnumPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
givnum
      Ptr Float
cPtr <- Array ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
c
      Ptr Float
sPtr <- Array ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
s
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lalsa Ptr CInt
icompqPtr Ptr CInt
smlsizPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
bxPtr Ptr CInt
ldbxPtr Ptr Float
uPtr Ptr CInt
lduPtr Ptr Float
vtPtr Ptr CInt
kPtr Ptr Float
diflPtr Ptr Float
difrPtr Ptr Float
zPtr Ptr Float
polesPtr Ptr CInt
givptrPtr Ptr CInt
givcolPtr Ptr CInt
ldgcolPtr Ptr CInt
permPtr Ptr Float
givnumPtr Ptr Float
cPtr Ptr Float
sPtr Ptr Float
rworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
bx
         IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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/clalsd.f>
lalsd ::
   Char {- ^ uplo -} ->
   Int {- ^ smlsiz -} ->
   IOArray ZeroInt Float {- ^ d -} ->
   IOArray ZeroInt Float {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Float {- ^ rcond -} ->
   Int {- ^ rworkSize -} ->
   Int {- ^ nlvl -} ->
   IO (Int, Int)
lalsd :: Char
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> Int
-> Int
-> IO (Int, Int)
lalsd Char
uplo Int
smlsiz IOArray ZeroInt Float
d IOArray ZeroInt Float
e IOArray (ZeroInt, ZeroInt) (Complex Float)
b Float
rcond Int
rworkSize Int
nlvl = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
dDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"lalsd: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nrhs)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nlvlInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
11Int -> 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
uploPtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
smlsizPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
smlsiz
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Float
rcondPtr <- Float -> FortranIO (Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rcond
      Ptr CInt
rankPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int) IO ())
-> IO () -> ContT (Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lalsd Ptr CChar
uploPtr Ptr CInt
smlsizPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dPtr Ptr Float
ePtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr Float
rcondPtr Ptr CInt
rankPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr 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/clangb.f>
langb ::
   Char {- ^ norm -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Int {- ^ lwork -} ->
   IO Float
langb :: Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Float
langb Char
norm Int
kl Int
ku Array (ZeroInt, ZeroInt) (Complex Float)
ab Int
lwork = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
klPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
      Ptr CInt
kuPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.langb Ptr CChar
normPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clange.f>
lange ::
   Char {- ^ norm -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO Float
lange :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Float
lange Char
norm Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CInt
mPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.lange Ptr CChar
normPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clangt.f>
langt ::
   Char {- ^ norm -} ->
   Array ZeroInt (Complex Float) {- ^ dl -} ->
   Array ZeroInt (Complex Float) {- ^ d -} ->
   Array ZeroInt (Complex Float) {- ^ du -} ->
   IO Float
langt :: Char
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> IO Float
langt Char
norm Array ZeroInt (Complex Float)
dl Array ZeroInt (Complex Float)
d Array ZeroInt (Complex Float)
du = do
   let dlDim0 :: Int
dlDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
dl
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
d
   let duDim0 :: Int
duDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
du
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"langt: n-1 == dlDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dlDim0)
   String -> Bool -> IO ()
Call.assert String
"langt: n-1 == duDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
duDim0)
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
dlPtr <- Array ZeroInt (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
dl
      Ptr (Complex Float)
dPtr <- Array ZeroInt (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
d
      Ptr (Complex Float)
duPtr <- Array ZeroInt (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
du
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> IO Float
FFI.langt Ptr CChar
normPtr Ptr CInt
nPtr Ptr (Complex Float)
dlPtr Ptr (Complex Float)
dPtr Ptr (Complex Float)
duPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clanhb.f>
lanhb ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Int {- ^ k -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Int {- ^ lwork -} ->
   IO Float
lanhb :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Float
lanhb Char
norm Char
uplo Int
k Array (ZeroInt, ZeroInt) (Complex Float)
ab Int
lwork = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.lanhb Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clanhe.f>
lanhe ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO Float
lanhe :: Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Float
lanhe Char
norm Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.lanhe Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clanhf.f>
lanhf ::
   Char {- ^ norm -} ->
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO Float
lanhf :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt (Complex Float)
-> Int
-> IO Float
lanhf Char
norm Char
transr Char
uplo Int
n Array ZeroInt (Complex Float)
a Int
lwork = do
   let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
a
   String -> Bool -> IO ()
Call.assert String
"lanhf: n*(n+1)`div`2 == aDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CChar
transrPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array ZeroInt (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
a
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> IO Float
FFI.lanhf Ptr CChar
normPtr Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr Float
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clanhp.f>
lanhp ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Int {- ^ lwork -} ->
   IO Float
lanhp :: Char
-> Char -> Int -> Array ZeroInt (Complex Float) -> Int -> IO Float
lanhp Char
norm Char
uplo Int
n Array ZeroInt (Complex Float)
ap Int
lwork = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"lanhp: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
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 Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> IO Float
FFI.lanhp Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr Float
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clanhs.f>
lanhs ::
   Char {- ^ norm -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO Float
lanhs :: Char -> Array (ZeroInt, ZeroInt) (Complex Float) -> Int -> IO Float
lanhs Char
norm Array (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.lanhs Ptr CChar
normPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clanht.f>
lanht ::
   Char {- ^ norm -} ->
   Array ZeroInt Float {- ^ d -} ->
   Array ZeroInt (Complex Float) {- ^ e -} ->
   IO Float
lanht :: Char
-> Array ZeroInt Float -> Array ZeroInt (Complex Float) -> IO Float
lanht Char
norm Array ZeroInt Float
d Array ZeroInt (Complex Float)
e = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
e
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"lanht: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
      Ptr (Complex Float)
ePtr <- Array ZeroInt (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
e
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt -> Ptr Float -> Ptr (Complex Float) -> IO Float
FFI.lanht Ptr CChar
normPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr (Complex Float)
ePtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clansb.f>
lansb ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Int {- ^ k -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Int {- ^ lwork -} ->
   IO Float
lansb :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Float
lansb Char
norm Char
uplo Int
k Array (ZeroInt, ZeroInt) (Complex Float)
ab Int
lwork = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.lansb Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clansp.f>
lansp ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Int {- ^ lwork -} ->
   IO Float
lansp :: Char
-> Char -> Int -> Array ZeroInt (Complex Float) -> Int -> IO Float
lansp Char
norm Char
uplo Int
n Array ZeroInt (Complex Float)
ap Int
lwork = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"lansp: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> IO Float
FFI.lansp Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr Float
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clansy.f>
lansy ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO Float
lansy :: Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Float
lansy Char
norm Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.lansy Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clantb.f>
lantb ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Int {- ^ k -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Int {- ^ lwork -} ->
   IO Float
lantb :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Float
lantb Char
norm Char
uplo Char
diag Int
k Array (ZeroInt, ZeroInt) (Complex Float)
ab Int
lwork = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
diagPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.lantb Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clantp.f>
lantp ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Int {- ^ lwork -} ->
   IO Float
lantp :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt (Complex Float)
-> Int
-> IO Float
lantp Char
norm Char
uplo Char
diag Int
n Array ZeroInt (Complex Float)
ap Int
lwork = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"lantp: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
diagPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> IO Float
FFI.lantp Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr Float
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clantr.f>
lantr ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO Float
lantr :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Float
lantr Char
norm Char
uplo Char
diag Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
lwork])
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CChar
uploPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
diagPtr <- Char -> FortranIO Float (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
mPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Float (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> IO Float
FFI.lantr Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clapll.f>
lapll ::
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ x -} ->
   Int {- ^ incx -} ->
   IOArray ZeroInt (Complex Float) {- ^ y -} ->
   Int {- ^ incy -} ->
   IO (Float)
lapll :: Int
-> IOArray ZeroInt (Complex Float)
-> Int
-> IOArray ZeroInt (Complex Float)
-> Int
-> IO Float
lapll Int
n IOArray ZeroInt (Complex Float)
x Int
incx IOArray ZeroInt (Complex Float)
y Int
incy = do
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
x
   let yDim0 :: Int
yDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
y
   String -> Bool -> IO ()
Call.assert String
"lapll: 1+(n-1)*incx == xDim0" (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
incx Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   String -> Bool -> IO ()
Call.assert String
"lapll: 1+(n-1)*incy == yDim0" (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
incy Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
yDim0)
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
xPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
x
      Ptr CInt
incxPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr (Complex Float)
yPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
y
      Ptr CInt
incyPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
      Ptr Float
ssminPtr <- FortranIO Float (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Float IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Float IO ()) -> IO () -> ContT Float IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> IO ()
FFI.lapll Ptr CInt
nPtr Ptr (Complex Float)
xPtr Ptr CInt
incxPtr Ptr (Complex Float)
yPtr Ptr CInt
incyPtr Ptr Float
ssminPtr
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
ssminPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clapmr.f>
lapmr ::
   Bool {- ^ forwrd -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IOArray ZeroInt CInt {- ^ k -} ->
   IO ()
lapmr :: Bool
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt CInt
-> IO ()
lapmr Bool
forwrd IOArray (ZeroInt, ZeroInt) (Complex Float)
x IOArray ZeroInt CInt
k = do
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x
   let kDim0 :: Int
kDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
k
   let n :: Int
n = Int
xDim0
   let ldx :: Int
ldx = Int
xDim1
   let m :: Int
m = Int
kDim0
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
forwrdPtr <- Bool -> FortranIO () (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
forwrd
      Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr CInt
kPtr <- IOArray ZeroInt CInt -> FortranIO () (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
k
      IO () -> ContT () IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lapmr Ptr Bool
forwrdPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr CInt
kPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clapmt.f>
lapmt ::
   Bool {- ^ forwrd -} ->
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IOArray ZeroInt CInt {- ^ k -} ->
   IO ()
lapmt :: Bool
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt CInt
-> IO ()
lapmt Bool
forwrd Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
x IOArray ZeroInt CInt
k = do
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x
   let kDim0 :: Int
kDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
k
   let n :: Int
n = Int
xDim0
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"lapmt: n == kDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
kDim0)
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
forwrdPtr <- Bool -> FortranIO () (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
forwrd
      Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr CInt
kPtr <- IOArray ZeroInt CInt -> FortranIO () (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
k
      IO () -> ContT () IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lapmt Ptr Bool
forwrdPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr CInt
kPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqgb.f>
laqgb ::
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Array ZeroInt Float {- ^ r -} ->
   Array ZeroInt Float {- ^ c -} ->
   Float {- ^ rowcnd -} ->
   Float {- ^ colcnd -} ->
   Float {- ^ amax -} ->
   IO (Char)
laqgb :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> IO Char
laqgb Int
kl Int
ku IOArray (ZeroInt, ZeroInt) (Complex Float)
ab Array ZeroInt Float
r Array ZeroInt Float
c Float
rowcnd Float
colcnd Float
amax = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let rDim0 :: Int
rDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
r
   let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
c
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let m :: Int
m = Int
rDim0
   String -> Bool -> IO ()
Call.assert String
"laqgb: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
   ContT Char IO Char -> IO Char
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Char IO Char -> IO Char) -> ContT Char IO Char -> IO Char
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
klPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
      Ptr CInt
kuPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Char (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
rPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
r
      Ptr Float
cPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
c
      Ptr Float
rowcndPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rowcnd
      Ptr Float
colcndPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
colcnd
      Ptr Float
amaxPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
amax
      Ptr CChar
equedPtr <- FortranIO Char (Ptr CChar)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Char IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Char IO ()) -> IO () -> ContT Char IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CChar
-> IO ()
FFI.laqgb Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
rPtr Ptr Float
cPtr Ptr Float
rowcndPtr Ptr Float
colcndPtr Ptr Float
amaxPtr Ptr CChar
equedPtr
      IO Char -> ContT Char IO Char
forall (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/claqge.f>
laqge ::
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt Float {- ^ r -} ->
   Array ZeroInt Float {- ^ c -} ->
   Float {- ^ rowcnd -} ->
   Float {- ^ colcnd -} ->
   Float {- ^ amax -} ->
   IO (Char)
laqge :: IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> Float
-> IO Char
laqge IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt Float
r Array ZeroInt Float
c Float
rowcnd Float
colcnd Float
amax = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let rDim0 :: Int
rDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
r
   let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
c
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let m :: Int
m = Int
rDim0
   String -> Bool -> IO ()
Call.assert String
"laqge: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
   ContT Char IO Char -> IO Char
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Char IO Char -> IO Char) -> ContT Char IO Char -> IO Char
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Char (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
rPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
r
      Ptr Float
cPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
c
      Ptr Float
rowcndPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rowcnd
      Ptr Float
colcndPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
colcnd
      Ptr Float
amaxPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
amax
      Ptr CChar
equedPtr <- FortranIO Char (Ptr CChar)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Char IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Char IO ()) -> IO () -> ContT Char IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CChar
-> IO ()
FFI.laqge Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
rPtr Ptr Float
cPtr Ptr Float
rowcndPtr Ptr Float
colcndPtr Ptr Float
amaxPtr Ptr CChar
equedPtr
      IO Char -> ContT Char IO Char
forall (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/claqhb.f>
laqhb ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Float {- ^ scond -} ->
   Float {- ^ amax -} ->
   IO (Array ZeroInt Float, Char)
laqhb :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> Float
-> IO (Array ZeroInt Float, Char)
laqhb Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Float)
ab Float
scond Float
amax = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Array ZeroInt Float, Char) IO (Array ZeroInt Float, Char)
-> IO (Array ZeroInt Float, Char)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float, Char) IO (Array ZeroInt Float, Char)
 -> IO (Array ZeroInt Float, Char))
-> ContT (Array ZeroInt Float, Char) IO (Array ZeroInt Float, Char)
-> IO (Array ZeroInt Float, Char)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt Float, Char) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float, Char) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int -> FortranIO (Array ZeroInt Float, Char) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt Float, Char) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO (Array ZeroInt Float, Char) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Char) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr Float
scondPtr <- Float -> FortranIO (Array ZeroInt Float, Char) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
scond
      Ptr Float
amaxPtr <- Float -> FortranIO (Array ZeroInt Float, Char) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
amax
      Ptr CChar
equedPtr <- FortranIO (Array ZeroInt Float, Char) (Ptr CChar)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Float, Char) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Char) IO ())
-> IO () -> ContT (Array ZeroInt Float, Char) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CChar
-> IO ()
FFI.laqhb Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr CChar
equedPtr
      IO (Array ZeroInt Float, Char)
-> ContT (Array ZeroInt Float, Char) IO (Array ZeroInt Float, Char)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Char)
 -> ContT
      (Array ZeroInt Float, Char) IO (Array ZeroInt Float, Char))
-> IO (Array ZeroInt Float, Char)
-> ContT (Array ZeroInt Float, Char) IO (Array ZeroInt Float, Char)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float -> Char -> (Array ZeroInt Float, Char))
-> IO (Array ZeroInt Float -> Char -> (Array ZeroInt Float, Char))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Array ZeroInt Float -> Char -> (Array ZeroInt Float, Char))
-> IO (Array ZeroInt Float)
-> IO (Char -> (Array ZeroInt Float, Char))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
         IO (Char -> (Array ZeroInt Float, Char))
-> IO Char -> IO (Array ZeroInt Float, Char)
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)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqhe.f>
laqhe ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt Float {- ^ s -} ->
   Float {- ^ scond -} ->
   Float {- ^ amax -} ->
   IO (Char)
laqhe :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt Float
-> Float
-> Float
-> IO Char
laqhe Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt Float
s Float
scond Float
amax = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
s
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"laqhe: n == sDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
   ContT Char IO Char -> IO Char
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Char IO Char -> IO Char) -> ContT Char IO Char -> IO Char
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Char (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Char (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
sPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
s
      Ptr Float
scondPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
scond
      Ptr Float
amaxPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
amax
      Ptr CChar
equedPtr <- FortranIO Char (Ptr CChar)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Char IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Char IO ()) -> IO () -> ContT Char IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CChar
-> IO ()
FFI.laqhe Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
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/claqhp.f>
laqhp ::
   Char {- ^ uplo -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt Float {- ^ s -} ->
   Float {- ^ scond -} ->
   Float {- ^ amax -} ->
   IO (Char)
laqhp :: Char
-> IOArray ZeroInt (Complex Float)
-> Array ZeroInt Float
-> Float
-> Float
-> IO Char
laqhp Char
uplo IOArray ZeroInt (Complex Float)
ap Array ZeroInt Float
s Float
scond Float
amax = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
s
   let n :: Int
n = Int
sDim0
   String -> Bool -> IO ()
Call.assert String
"laqhp: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   ContT Char IO Char -> IO Char
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Char IO Char -> IO Char) -> ContT Char IO Char -> IO Char
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Char (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Char (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr Float
sPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
s
      Ptr Float
scondPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
scond
      Ptr Float
amaxPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
amax
      Ptr CChar
equedPtr <- FortranIO Char (Ptr CChar)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Char IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Char IO ()) -> IO () -> ContT Char IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CChar
-> IO ()
FFI.laqhp Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
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/claqp2.f>
laqp2 ::
   Int {- ^ m -} ->
   Int {- ^ offset -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray ZeroInt CInt {- ^ jpvt -} ->
   IOArray ZeroInt Float {- ^ vn1 -} ->
   IOArray ZeroInt Float {- ^ vn2 -} ->
   IO (Array ZeroInt (Complex Float))
laqp2 :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt CInt
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IO (Array ZeroInt (Complex Float))
laqp2 Int
m Int
offset IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray ZeroInt CInt
jpvt IOArray ZeroInt Float
vn1 IOArray ZeroInt Float
vn2 = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let jpvtDim0 :: Int
jpvtDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
jpvt
   let vn1Dim0 :: Int
vn1Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vn1
   let vn2Dim0 :: Int
vn2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vn2
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"laqp2: n == jpvtDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
jpvtDim0)
   String -> Bool -> IO ()
Call.assert String
"laqp2: n == vn1Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vn1Dim0)
   String -> Bool -> IO ()
Call.assert String
"laqp2: n == vn2Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vn2Dim0)
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
-> IO (Array ZeroInt (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
 -> IO (Array ZeroInt (Complex Float)))
-> ContT
     (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
-> IO (Array ZeroInt (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
offsetPtr <- Int -> FortranIO (Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
offset
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
jpvtPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpvt
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr Float
vn1Ptr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vn1
      Ptr Float
vn2Ptr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vn2
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      IO () -> ContT (Array ZeroInt (Complex Float)) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float)) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> IO ()
FFI.laqp2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
offsetPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
jpvtPtr Ptr (Complex Float)
tauPtr Ptr Float
vn1Ptr Ptr Float
vn2Ptr Ptr (Complex Float)
workPtr
      IO (Array ZeroInt (Complex Float))
-> ContT
     (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float))
 -> ContT
      (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float)))
-> IO (Array ZeroInt (Complex Float))
-> ContT
     (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqps.f>
laqps ::
   Int {- ^ m -} ->
   Int {- ^ offset -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray ZeroInt CInt {- ^ jpvt -} ->
   Int {- ^ kb -} ->
   IOArray ZeroInt Float {- ^ vn1 -} ->
   IOArray ZeroInt Float {- ^ vn2 -} ->
   IOArray ZeroInt (Complex Float) {- ^ auxv -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ f -} ->
   IO (Int, Array ZeroInt (Complex Float))
laqps :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt CInt
-> Int
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Int, Array ZeroInt (Complex Float))
laqps Int
m Int
offset IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray ZeroInt CInt
jpvt Int
kb IOArray ZeroInt Float
vn1 IOArray ZeroInt Float
vn2 IOArray ZeroInt (Complex Float)
auxv IOArray (ZeroInt, ZeroInt) (Complex Float)
f = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let jpvtDim0 :: Int
jpvtDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
jpvt
   let vn1Dim0 :: Int
vn1Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vn1
   let vn2Dim0 :: Int
vn2Dim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
vn2
   let auxvDim0 :: Int
auxvDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
auxv
   let (Int
fDim0,Int
fDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
f
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nb :: Int
nb = Int
auxvDim0
   let ldf :: Int
ldf = Int
fDim1
   String -> Bool -> IO ()
Call.assert String
"laqps: n == jpvtDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
jpvtDim0)
   String -> Bool -> IO ()
Call.assert String
"laqps: n == vn1Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vn1Dim0)
   String -> Bool -> IO ()
Call.assert String
"laqps: n == vn2Dim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vn2Dim0)
   String -> Bool -> IO ()
Call.assert String
"laqps: nb == fDim0" (Int
nb Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
fDim0)
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kb
   ContT
  (Int, Array ZeroInt (Complex Float))
  IO
  (Int, Array ZeroInt (Complex Float))
-> IO (Int, Array ZeroInt (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt (Complex Float))
   IO
   (Int, Array ZeroInt (Complex Float))
 -> IO (Int, Array ZeroInt (Complex Float)))
-> ContT
     (Int, Array ZeroInt (Complex Float))
     IO
     (Int, Array ZeroInt (Complex Float))
-> IO (Int, Array ZeroInt (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Int, Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
offsetPtr <- Int -> FortranIO (Int, Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
offset
      Ptr CInt
nbPtr <- Int -> FortranIO (Int, Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
      Ptr CInt
kbPtr <- FortranIO (Int, Array ZeroInt (Complex Float)) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
jpvtPtr <- IOArray ZeroInt CInt
-> FortranIO (Int, Array ZeroInt (Complex Float)) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
jpvt
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr Float
vn1Ptr <- IOArray ZeroInt Float
-> FortranIO (Int, Array ZeroInt (Complex Float)) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vn1
      Ptr Float
vn2Ptr <- IOArray ZeroInt Float
-> FortranIO (Int, Array ZeroInt (Complex Float)) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
vn2
      Ptr (Complex Float)
auxvPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
auxv
      Ptr (Complex Float)
fPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
f
      Ptr CInt
ldfPtr <- Int -> FortranIO (Int, Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldf
      IO () -> ContT (Int, Array ZeroInt (Complex Float)) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Array ZeroInt (Complex Float)) IO ())
-> IO () -> ContT (Int, Array ZeroInt (Complex Float)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.laqps Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
offsetPtr Ptr CInt
nbPtr Ptr CInt
kbPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
jpvtPtr Ptr (Complex Float)
tauPtr Ptr Float
vn1Ptr Ptr Float
vn2Ptr Ptr (Complex Float)
auxvPtr Ptr (Complex Float)
fPtr Ptr CInt
ldfPtr
      IO (Int, Array ZeroInt (Complex Float))
-> ContT
     (Int, Array ZeroInt (Complex Float))
     IO
     (Int, Array ZeroInt (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Int, Array ZeroInt (Complex Float))
 -> ContT
      (Int, Array ZeroInt (Complex Float))
      IO
      (Int, Array ZeroInt (Complex Float)))
-> IO (Int, Array ZeroInt (Complex Float))
-> ContT
     (Int, Array ZeroInt (Complex Float))
     IO
     (Int, Array ZeroInt (Complex Float))
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt (Complex Float)
 -> (Int, Array ZeroInt (Complex Float)))
-> IO
     (Int
      -> Array ZeroInt (Complex Float)
      -> (Int, Array ZeroInt (Complex Float)))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Int
   -> Array ZeroInt (Complex Float)
   -> (Int, Array ZeroInt (Complex Float)))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float)
      -> (Int, Array ZeroInt (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
kbPtr)
         IO
  (Array ZeroInt (Complex Float)
   -> (Int, Array ZeroInt (Complex Float)))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int, Array ZeroInt (Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqr0.f>
laqr0 ::
   Bool {- ^ wantt -} ->
   Bool {- ^ wantz -} ->
   Int {- ^ ilo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->
   Int {- ^ iloz -} ->
   Int {- ^ ihiz -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   Int {- ^ workSize -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Int)
laqr0 :: Bool
-> Bool
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO (Array ZeroInt (Complex Float), Int)
laqr0 Bool
wantt Bool
wantz Int
ilo IOArray (ZeroInt, ZeroInt) (Complex Float)
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) (Complex Float)
z Int
workSize Int
lwork = do
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
h
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let n :: Int
n = Int
hDim0
   let ldh :: Int
ldh = Int
hDim1
   let ihi :: Int
ihi = Int
zDim0
   let ldz :: Int
ldz = Int
zDim1
   IOArray ZeroInt (Complex Float)
w <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
wanttPtr <- Bool -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
      Ptr Bool
wantzPtr <- Bool -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr (Complex Float)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
h
      Ptr CInt
ldhPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr (Complex Float)
wPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
w
      Ptr CInt
ilozPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
      Ptr CInt
ihizPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laqr0 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Float)
hPtr Ptr CInt
ldhPtr Ptr (Complex Float)
wPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
w
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/claqr1.f>
laqr1 ::
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->
   Complex Float {- ^ s1 -} ->
   Complex Float {- ^ s2 -} ->
   IO (Array ZeroInt (Complex Float))
laqr1 :: Array (ZeroInt, ZeroInt) (Complex Float)
-> Complex Float
-> Complex Float
-> IO (Array ZeroInt (Complex Float))
laqr1 Array (ZeroInt, ZeroInt) (Complex Float)
h Complex Float
s1 Complex Float
s2 = do
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
h
   let n :: Int
n = Int
hDim0
   let ldh :: Int
ldh = Int
hDim1
   IOArray ZeroInt (Complex Float)
v <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
-> IO (Array ZeroInt (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
 -> IO (Array ZeroInt (Complex Float)))
-> ContT
     (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
-> IO (Array ZeroInt (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
hPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
h
      Ptr CInt
ldhPtr <- Int -> FortranIO (Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr (Complex Float)
s1Ptr <- Complex Float
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
s1
      Ptr (Complex Float)
s2Ptr <- Complex Float
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
s2
      Ptr (Complex Float)
vPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
v
      IO () -> ContT (Array ZeroInt (Complex Float)) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float)) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> IO ()
FFI.laqr1 Ptr CInt
nPtr Ptr (Complex Float)
hPtr Ptr CInt
ldhPtr Ptr (Complex Float)
s1Ptr Ptr (Complex Float)
s2Ptr Ptr (Complex Float)
vPtr
      IO (Array ZeroInt (Complex Float))
-> ContT
     (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float))
 -> ContT
      (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float)))
-> IO (Array ZeroInt (Complex Float))
-> ContT
     (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
v

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqr2.f>
laqr2 ::
   Bool {- ^ wantt -} ->
   Bool {- ^ wantz -} ->
   Int {- ^ ktop -} ->
   Int {- ^ kbot -} ->
   Int {- ^ nw -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->
   Int {- ^ iloz -} ->
   Int {- ^ ihiz -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   Int {- ^ ldv -} ->
   Int {- ^ nh -} ->
   Int {- ^ ldt -} ->
   Int {- ^ nv -} ->
   Int {- ^ ldwv -} ->
   Int {- ^ lwork -} ->
   IO (Int, Int, Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float))
laqr2 :: Bool
-> Bool
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
laqr2 Bool
wantt Bool
wantz Int
ktop Int
kbot Int
nw IOArray (ZeroInt, ZeroInt) (Complex Float)
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) (Complex Float)
z Int
ldv Int
nh Int
ldt Int
nv Int
ldwv Int
lwork = do
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
h
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let n :: Int
n = Int
hDim0
   let ldh :: Int
ldh = Int
hDim1
   let ldz :: Int
ldz = Int
zDim1
   String -> Bool -> IO ()
Call.assert String
"laqr2: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt (Complex Float)
sh <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kbot
   IOArray (ZeroInt, ZeroInt) (Complex Float)
v <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldv
   IOArray (ZeroInt, ZeroInt) (Complex Float)
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldt
   IOArray (ZeroInt, ZeroInt) (Complex Float)
wv <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldwv
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
   ContT
  (Int, Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
  IO
  (Int, Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Int, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
   IO
   (Int, Int, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
 -> IO
      (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> ContT
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
wanttPtr <- Bool
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
      Ptr Bool
wantzPtr <- Bool
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
ktopPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ktop
      Ptr CInt
kbotPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kbot
      Ptr CInt
nwPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nw
      Ptr (Complex Float)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
h
      Ptr CInt
ldhPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr CInt
ilozPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
      Ptr CInt
ihizPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr CInt
nsPtr <- FortranIO
  (Int, Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
ndPtr <- FortranIO
  (Int, Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
shPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
sh
      Ptr (Complex Float)
vPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
v
      Ptr CInt
ldvPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr CInt
nhPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nh
      Ptr (Complex Float)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
t
      Ptr CInt
ldtPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr CInt
nvPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nv
      Ptr (Complex Float)
wvPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
wv
      Ptr CInt
ldwvPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwv
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      IO ()
-> ContT
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      ())
-> IO ()
-> ContT
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.laqr2 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
ktopPtr Ptr CInt
kbotPtr Ptr CInt
nwPtr Ptr (Complex Float)
hPtr Ptr CInt
ldhPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr CInt
nsPtr Ptr CInt
ndPtr Ptr (Complex Float)
shPtr Ptr (Complex Float)
vPtr Ptr CInt
ldvPtr Ptr CInt
nhPtr Ptr (Complex Float)
tPtr Ptr CInt
ldtPtr Ptr CInt
nvPtr Ptr (Complex Float)
wvPtr Ptr CInt
ldwvPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr
      IO
  (Int, Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Int, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
 -> ContT
      (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ (Int
 -> Int
 -> Array ZeroInt (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> (Int, Int, Array ZeroInt (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO
     (Int
      -> Int
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Int, Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Int
   -> Int
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO Int
-> IO
     (Int
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Int, Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
nsPtr)
         IO
  (Int
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Int, Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ndPtr)
         IO
  (Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Int, Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
sh
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Int, Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
v
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Int, Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
t
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
wv

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqr3.f>
laqr3 ::
   Bool {- ^ wantt -} ->
   Bool {- ^ wantz -} ->
   Int {- ^ ktop -} ->
   Int {- ^ kbot -} ->
   Int {- ^ nw -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->
   Int {- ^ iloz -} ->
   Int {- ^ ihiz -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   Int {- ^ ldv -} ->
   Int {- ^ nh -} ->
   Int {- ^ ldt -} ->
   Int {- ^ nv -} ->
   Int {- ^ ldwv -} ->
   Int {- ^ lwork -} ->
   IO (Int, Int, Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float))
laqr3 :: Bool
-> Bool
-> Int
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
laqr3 Bool
wantt Bool
wantz Int
ktop Int
kbot Int
nw IOArray (ZeroInt, ZeroInt) (Complex Float)
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) (Complex Float)
z Int
ldv Int
nh Int
ldt Int
nv Int
ldwv Int
lwork = do
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
h
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let n :: Int
n = Int
hDim0
   let ldh :: Int
ldh = Int
hDim1
   let ldz :: Int
ldz = Int
zDim1
   String -> Bool -> IO ()
Call.assert String
"laqr3: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt (Complex Float)
sh <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
kbot
   IOArray (ZeroInt, ZeroInt) (Complex Float)
v <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldv
   IOArray (ZeroInt, ZeroInt) (Complex Float)
t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldt
   IOArray (ZeroInt, ZeroInt) (Complex Float)
wv <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nw Int
ldwv
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
   ContT
  (Int, Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
  IO
  (Int, Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Int, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
   IO
   (Int, Int, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
 -> IO
      (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> ContT
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
wanttPtr <- Bool
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
      Ptr Bool
wantzPtr <- Bool
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
ktopPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ktop
      Ptr CInt
kbotPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kbot
      Ptr CInt
nwPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nw
      Ptr (Complex Float)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
h
      Ptr CInt
ldhPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr CInt
ilozPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
      Ptr CInt
ihizPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr CInt
nsPtr <- FortranIO
  (Int, Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
ndPtr <- FortranIO
  (Int, Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
shPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
sh
      Ptr (Complex Float)
vPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
v
      Ptr CInt
ldvPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr CInt
nhPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nh
      Ptr (Complex Float)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
t
      Ptr CInt
ldtPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr CInt
nvPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nv
      Ptr (Complex Float)
wvPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
wv
      Ptr CInt
ldwvPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwv
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      IO ()
-> ContT
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      ())
-> IO ()
-> ContT
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.laqr3 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
ktopPtr Ptr CInt
kbotPtr Ptr CInt
nwPtr Ptr (Complex Float)
hPtr Ptr CInt
ldhPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr CInt
nsPtr Ptr CInt
ndPtr Ptr (Complex Float)
shPtr Ptr (Complex Float)
vPtr Ptr CInt
ldvPtr Ptr CInt
nhPtr Ptr (Complex Float)
tPtr Ptr CInt
ldtPtr Ptr CInt
nvPtr Ptr (Complex Float)
wvPtr Ptr CInt
ldwvPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr
      IO
  (Int, Int, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Int, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
 -> ContT
      (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ (Int
 -> Int
 -> Array ZeroInt (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> (Int, Int, Array ZeroInt (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO
     (Int
      -> Int
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Int, Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Int
   -> Int
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO Int
-> IO
     (Int
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Int, Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
nsPtr)
         IO
  (Int
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Int, Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ndPtr)
         IO
  (Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Int, Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
sh
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Int, Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
v
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Int, Int, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
t
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Int, Int, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int, Int, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
wv

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqr4.f>
laqr4 ::
   Bool {- ^ wantt -} ->
   Bool {- ^ wantz -} ->
   Int {- ^ ilo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->
   Int {- ^ iloz -} ->
   Int {- ^ ihiz -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   Int {- ^ workSize -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Int)
laqr4 :: Bool
-> Bool
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO (Array ZeroInt (Complex Float), Int)
laqr4 Bool
wantt Bool
wantz Int
ilo IOArray (ZeroInt, ZeroInt) (Complex Float)
h Int
iloz Int
ihiz IOArray (ZeroInt, ZeroInt) (Complex Float)
z Int
workSize Int
lwork = do
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
h
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let n :: Int
n = Int
hDim0
   let ldh :: Int
ldh = Int
hDim1
   let ihi :: Int
ihi = Int
zDim0
   let ldz :: Int
ldz = Int
zDim1
   IOArray ZeroInt (Complex Float)
w <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
wanttPtr <- Bool -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
      Ptr Bool
wantzPtr <- Bool -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
iloPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilo
      Ptr CInt
ihiPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihi
      Ptr (Complex Float)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
h
      Ptr CInt
ldhPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr (Complex Float)
wPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
w
      Ptr CInt
ilozPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
      Ptr CInt
ihizPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laqr4 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Float)
hPtr Ptr CInt
ldhPtr Ptr (Complex Float)
wPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
w
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/claqr5.f>
laqr5 ::
   Bool {- ^ wantt -} ->
   Bool {- ^ wantz -} ->
   Int {- ^ kacc22 -} ->
   Int {- ^ ktop -} ->
   Int {- ^ kbot -} ->
   IOArray ZeroInt (Complex Float) {- ^ s -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ h -} ->
   Int {- ^ iloz -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   Int {- ^ ldv -} ->
   Int {- ^ ldu -} ->
   Int {- ^ nv -} ->
   Int {- ^ ldwv -} ->
   Int {- ^ nh -} ->
   Int {- ^ ldwh -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float))
laqr5 :: Bool
-> Bool
-> Int
-> Int
-> Int
-> IOArray ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
laqr5 Bool
wantt Bool
wantz Int
kacc22 Int
ktop Int
kbot IOArray ZeroInt (Complex Float)
s IOArray (ZeroInt, ZeroInt) (Complex Float)
h Int
iloz IOArray (ZeroInt, ZeroInt) (Complex Float)
z Int
ldv Int
ldu Int
nv Int
ldwv Int
nh Int
ldwh = do
   let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
s
   let (Int
hDim0,Int
hDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
h
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let nshfts :: Int
nshfts = Int
sDim0
   let n :: Int
n = Int
hDim0
   let ldh :: Int
ldh = Int
hDim1
   let ihiz :: Int
ihiz = Int
zDim0
   let ldz :: Int
ldz = Int
zDim1
   IOArray (ZeroInt, ZeroInt) (Complex Float)
v <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
nshftsInt -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2) Int
ldv
   IOArray (ZeroInt, ZeroInt) (Complex Float)
u <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nshftsInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
3) Int
ldu
   IOArray (ZeroInt, ZeroInt) (Complex Float)
wv <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
3Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nshftsInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
3) Int
ldwv
   IOArray (ZeroInt, ZeroInt) (Complex Float)
wh <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nh Int
ldwh
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
 -> IO
      (Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
wanttPtr <- Bool
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantt
      Ptr Bool
wantzPtr <- Bool
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      Ptr CInt
kacc22Ptr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kacc22
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
ktopPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ktop
      Ptr CInt
kbotPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kbot
      Ptr CInt
nshftsPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nshfts
      Ptr (Complex Float)
sPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
s
      Ptr (Complex Float)
hPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
h
      Ptr CInt
ldhPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldh
      Ptr CInt
ilozPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iloz
      Ptr CInt
ihizPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ihiz
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
vPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
v
      Ptr CInt
ldvPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr (Complex Float)
uPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
u
      Ptr CInt
lduPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr CInt
nvPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nv
      Ptr (Complex Float)
wvPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
wv
      Ptr CInt
ldwvPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwv
      Ptr CInt
nhPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nh
      Ptr (Complex Float)
whPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
wh
      Ptr CInt
ldwhPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwh
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.laqr5 Ptr Bool
wanttPtr Ptr Bool
wantzPtr Ptr CInt
kacc22Ptr Ptr CInt
nPtr Ptr CInt
ktopPtr Ptr CInt
kbotPtr Ptr CInt
nshftsPtr Ptr (Complex Float)
sPtr Ptr (Complex Float)
hPtr Ptr CInt
ldhPtr Ptr CInt
ilozPtr Ptr CInt
ihizPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
vPtr Ptr CInt
ldvPtr Ptr (Complex Float)
uPtr Ptr CInt
lduPtr Ptr CInt
nvPtr Ptr (Complex Float)
wvPtr Ptr CInt
ldwvPtr Ptr CInt
nhPtr Ptr (Complex Float)
whPtr Ptr CInt
ldwhPtr
      IO
  (Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> (Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
v
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
u
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
wv
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
wh

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claqsb.f>
laqsb ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Array ZeroInt Float {- ^ s -} ->
   Float {- ^ scond -} ->
   Float {- ^ amax -} ->
   IO (Char)
laqsb :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt Float
-> Float
-> Float
-> IO Char
laqsb Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Float)
ab Array ZeroInt Float
s Float
scond Float
amax = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
s
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   String -> Bool -> IO ()
Call.assert String
"laqsb: n == sDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
   ContT Char IO Char -> IO Char
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Char IO Char -> IO Char) -> ContT Char IO Char -> IO Char
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Char (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Char (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
sPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
s
      Ptr Float
scondPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
scond
      Ptr Float
amaxPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
amax
      Ptr CChar
equedPtr <- FortranIO Char (Ptr CChar)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Char IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Char IO ()) -> IO () -> ContT Char IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CChar
-> IO ()
FFI.laqsb Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
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/claqsp.f>
laqsp ::
   Char {- ^ uplo -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt Float {- ^ s -} ->
   Float {- ^ scond -} ->
   Float {- ^ amax -} ->
   IO (Char)
laqsp :: Char
-> IOArray ZeroInt (Complex Float)
-> Array ZeroInt Float
-> Float
-> Float
-> IO Char
laqsp Char
uplo IOArray ZeroInt (Complex Float)
ap Array ZeroInt Float
s Float
scond Float
amax = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
s
   let n :: Int
n = Int
sDim0
   String -> Bool -> IO ()
Call.assert String
"laqsp: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   ContT Char IO Char -> IO Char
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Char IO Char -> IO Char) -> ContT Char IO Char -> IO Char
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Char (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Char (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr Float
sPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
s
      Ptr Float
scondPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
scond
      Ptr Float
amaxPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
amax
      Ptr CChar
equedPtr <- FortranIO Char (Ptr CChar)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Char IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Char IO ()) -> IO () -> ContT Char IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CChar
-> IO ()
FFI.laqsp Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
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/claqsy.f>
laqsy ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt Float {- ^ s -} ->
   Float {- ^ scond -} ->
   Float {- ^ amax -} ->
   IO (Char)
laqsy :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt Float
-> Float
-> Float
-> IO Char
laqsy Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt Float
s Float
scond Float
amax = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
s
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"laqsy: n == sDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
   ContT Char IO Char -> IO Char
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Char IO Char -> IO Char) -> ContT Char IO Char -> IO Char
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Char (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Char (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Char (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
sPtr <- Array ZeroInt Float -> FortranIO Char (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
s
      Ptr Float
scondPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
scond
      Ptr Float
amaxPtr <- Float -> FortranIO Char (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
amax
      Ptr CChar
equedPtr <- FortranIO Char (Ptr CChar)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Char IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Char IO ()) -> IO () -> ContT Char IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CChar
-> IO ()
FFI.laqsy Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
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/clar1v.f>
lar1v ::
   Int {- ^ b1 -} ->
   Int {- ^ bn -} ->
   Float {- ^ lambda -} ->
   Array ZeroInt Float {- ^ d -} ->
   Array ZeroInt Float {- ^ l -} ->
   Array ZeroInt Float {- ^ ld -} ->
   Array ZeroInt Float {- ^ lld -} ->
   Float {- ^ pivmin -} ->
   Float {- ^ gaptol -} ->
   IOArray ZeroInt (Complex Float) {- ^ z -} ->
   Bool {- ^ wantnc -} ->
   Int {- ^ r -} ->
   IO (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
lar1v :: Int
-> Int
-> Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Array ZeroInt Float
-> Float
-> Float
-> IOArray ZeroInt (Complex Float)
-> Bool
-> Int
-> IO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
lar1v Int
b1 Int
bn Float
lambda Array ZeroInt Float
d Array ZeroInt Float
l Array ZeroInt Float
ld Array ZeroInt Float
lld Float
pivmin Float
gaptol IOArray ZeroInt (Complex Float)
z Bool
wantnc Int
r = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
   let lDim0 :: Int
lDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
l
   let ldDim0 :: Int
ldDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
ld
   let lldDim0 :: Int
lldDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
lld
   let zDim0 :: Int
zDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
z
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"lar1v: n-1 == lDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
lDim0)
   String -> Bool -> IO ()
Call.assert String
"lar1v: n-1 == ldDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ldDim0)
   String -> Bool -> IO ()
Call.assert String
"lar1v: n-1 == lldDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
lldDim0)
   String -> Bool -> IO ()
Call.assert String
"lar1v: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt CInt
isuppz <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
  IO
  (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
-> IO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
   IO
   (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
 -> IO
      (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float))
-> ContT
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     IO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
-> IO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
b1Ptr <- Int
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
b1
      Ptr CInt
bnPtr <- Int
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
bn
      Ptr Float
lambdaPtr <- Float
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
lambda
      Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
      Ptr Float
lPtr <- Array ZeroInt Float
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
l
      Ptr Float
ldPtr <- Array ZeroInt Float
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
ld
      Ptr Float
lldPtr <- Array ZeroInt Float
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
lld
      Ptr Float
pivminPtr <- Float
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
pivmin
      Ptr Float
gaptolPtr <- Float
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
gaptol
      Ptr (Complex Float)
zPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
z
      Ptr Bool
wantncPtr <- Bool
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantnc
      Ptr CInt
negcntPtr <- FortranIO
  (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
ztzPtr <- FortranIO
  (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
mingmaPtr <- FortranIO
  (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
rPtr <- Int
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
r
      Ptr CInt
isuppzPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isuppz
      Ptr Float
nrminvPtr <- FortranIO
  (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
residPtr <- FortranIO
  (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
rqcorrPtr <- FortranIO
  (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      IO ()
-> ContT
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
      IO
      ())
-> IO ()
-> ContT
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Bool
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.lar1v Ptr CInt
nPtr Ptr CInt
b1Ptr Ptr CInt
bnPtr Ptr Float
lambdaPtr Ptr Float
dPtr Ptr Float
lPtr Ptr Float
ldPtr Ptr Float
lldPtr Ptr Float
pivminPtr Ptr Float
gaptolPtr Ptr (Complex Float)
zPtr Ptr Bool
wantncPtr Ptr CInt
negcntPtr Ptr Float
ztzPtr Ptr Float
mingmaPtr Ptr CInt
rPtr Ptr CInt
isuppzPtr Ptr Float
nrminvPtr Ptr Float
residPtr Ptr Float
rqcorrPtr Ptr Float
workPtr
      IO
  (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
-> ContT
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     IO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
 -> ContT
      (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
      IO
      (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float))
-> IO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
-> ContT
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
     IO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Float
 -> Float
 -> Int
 -> Array ZeroInt CInt
 -> Float
 -> Float
 -> Float
 -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
     Float))
-> IO
     (Int
      -> Float
      -> Float
      -> Int
      -> Array ZeroInt CInt
      -> Float
      -> Float
      -> Float
      -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
          Float))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,,)
         IO
  (Int
   -> Float
   -> Float
   -> Int
   -> Array ZeroInt CInt
   -> Float
   -> Float
   -> Float
   -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
       Float))
-> IO Int
-> IO
     (Float
      -> Float
      -> Int
      -> Array ZeroInt CInt
      -> Float
      -> Float
      -> Float
      -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
          Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
negcntPtr)
         IO
  (Float
   -> Float
   -> Int
   -> Array ZeroInt CInt
   -> Float
   -> Float
   -> Float
   -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
       Float))
-> IO Float
-> IO
     (Float
      -> Int
      -> Array ZeroInt CInt
      -> Float
      -> Float
      -> Float
      -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
          Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
ztzPtr
         IO
  (Float
   -> Int
   -> Array ZeroInt CInt
   -> Float
   -> Float
   -> Float
   -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
       Float))
-> IO Float
-> IO
     (Int
      -> Array ZeroInt CInt
      -> Float
      -> Float
      -> Float
      -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
          Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
mingmaPtr
         IO
  (Int
   -> Array ZeroInt CInt
   -> Float
   -> Float
   -> Float
   -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
       Float))
-> IO Int
-> IO
     (Array ZeroInt CInt
      -> Float
      -> Float
      -> Float
      -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
          Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
rPtr)
         IO
  (Array ZeroInt CInt
   -> Float
   -> Float
   -> Float
   -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
       Float))
-> IO (Array ZeroInt CInt)
-> IO
     (Float
      -> Float
      -> Float
      -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
          Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt CInt -> IO (Array ZeroInt CInt)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt CInt
isuppz
         IO
  (Float
   -> Float
   -> Float
   -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
       Float))
-> IO Float
-> IO
     (Float
      -> Float
      -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
          Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
nrminvPtr
         IO
  (Float
   -> Float
   -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
       Float))
-> IO Float
-> IO
     (Float
      -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
          Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
residPtr
         IO
  (Float
   -> (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float,
       Float))
-> IO Float
-> IO
     (Int, Float, Float, Int, Array ZeroInt CInt, Float, Float, Float)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rqcorrPtr

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

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarcm.f>
larcm ::
   Array (ZeroInt,ZeroInt) Float {- ^ a -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldc -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float))
larcm :: Array (ZeroInt, ZeroInt) Float
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
larcm Array (ZeroInt, ZeroInt) Float
a Array (ZeroInt, ZeroInt) (Complex Float)
b Int
ldc = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) Float -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) Float
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let m :: Int
m = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let n :: Int
n = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   IOArray (ZeroInt, ZeroInt) (Complex Float)
c <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldc
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float))
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float))
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float))
 -> IO (Array (ZeroInt, ZeroInt) (Complex Float)))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Float
aPtr <- Array (ZeroInt, ZeroInt) Float
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) Float
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> IO ()
FFI.larcm Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr Float
rworkPtr
      IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float))
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
c

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

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarfb.f>
larfb ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Char {- ^ direct -} ->
   Char {- ^ storev -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ v -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ t -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ ldwork -} ->
   IO ()
larfb :: Char
-> Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO ()
larfb Char
side Char
trans Char
direct Char
storev Int
m Array (ZeroInt, ZeroInt) (Complex Float)
v Array (ZeroInt, ZeroInt) (Complex Float)
t IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
ldwork = do
   let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
v
   let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
t
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let _vSize :: Int
_vSize = Int
vDim0
   let ldv :: Int
ldv = Int
vDim1
   let k :: Int
k = Int
tDim0
   let ldt :: Int
ldt = Int
tDim1
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   IOArray (ZeroInt, ZeroInt) (Complex Float)
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
k Int
ldwork
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
transPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
directPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
direct
      Ptr CChar
storevPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
storev
      Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr (Complex Float)
vPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
v
      Ptr CInt
ldvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr (Complex Float)
tPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
t
      Ptr CInt
ldtPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
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 (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.larfb Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CChar
directPtr Ptr CChar
storevPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
vPtr Ptr CInt
ldvPtr Ptr (Complex Float)
tPtr Ptr CInt
ldtPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
workPtr Ptr CInt
ldworkPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarfg.f>
larfg ::
   Int {- ^ n -} ->
   Complex Float {- ^ alpha -} ->
   IOArray ZeroInt (Complex Float) {- ^ x -} ->
   Int {- ^ incx -} ->
   IO (Complex Float, Complex Float)
larfg :: Int
-> Complex Float
-> IOArray ZeroInt (Complex Float)
-> Int
-> IO (Complex Float, Complex Float)
larfg Int
n Complex Float
alpha IOArray ZeroInt (Complex Float)
x Int
incx = do
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
x
   let _xSize :: Int
_xSize = Int
xDim0
   ContT
  (Complex Float, Complex Float) IO (Complex Float, Complex Float)
-> IO (Complex Float, Complex Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Complex Float, Complex Float) IO (Complex Float, Complex Float)
 -> IO (Complex Float, Complex Float))
-> ContT
     (Complex Float, Complex Float) IO (Complex Float, Complex Float)
-> IO (Complex Float, Complex Float)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO (Complex Float, Complex Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
alphaPtr <- Complex Float
-> FortranIO (Complex Float, Complex Float) (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
alpha
      Ptr (Complex Float)
xPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Complex Float, Complex Float) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
x
      Ptr CInt
incxPtr <- Int -> FortranIO (Complex Float, Complex Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr (Complex Float)
tauPtr <- FortranIO (Complex Float, Complex Float) (Ptr (Complex Float))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Complex Float, Complex Float) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Complex Float, Complex Float) IO ())
-> IO () -> ContT (Complex Float, Complex Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> IO ()
FFI.larfg Ptr CInt
nPtr Ptr (Complex Float)
alphaPtr Ptr (Complex Float)
xPtr Ptr CInt
incxPtr Ptr (Complex Float)
tauPtr
      IO (Complex Float, Complex Float)
-> ContT
     (Complex Float, Complex Float) IO (Complex Float, Complex Float)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Complex Float, Complex Float)
 -> ContT
      (Complex Float, Complex Float) IO (Complex Float, Complex Float))
-> IO (Complex Float, Complex Float)
-> ContT
     (Complex Float, Complex Float) IO (Complex Float, Complex Float)
forall a b. (a -> b) -> a -> b
$ (Complex Float -> Complex Float -> (Complex Float, Complex Float))
-> IO
     (Complex Float -> Complex Float -> (Complex Float, Complex Float))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Complex Float -> Complex Float -> (Complex Float, Complex Float))
-> IO (Complex Float)
-> IO (Complex Float -> (Complex Float, Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Float) -> IO (Complex Float)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Float)
alphaPtr
         IO (Complex Float -> (Complex Float, Complex Float))
-> IO (Complex Float) -> IO (Complex Float, Complex Float)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Float) -> IO (Complex Float)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Float)
tauPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarfgp.f>
larfgp ::
   Int {- ^ n -} ->
   Complex Float {- ^ alpha -} ->
   IOArray ZeroInt (Complex Float) {- ^ x -} ->
   Int {- ^ incx -} ->
   IO (Complex Float, Complex Float)
larfgp :: Int
-> Complex Float
-> IOArray ZeroInt (Complex Float)
-> Int
-> IO (Complex Float, Complex Float)
larfgp Int
n Complex Float
alpha IOArray ZeroInt (Complex Float)
x Int
incx = do
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
x
   let _xSize :: Int
_xSize = Int
xDim0
   ContT
  (Complex Float, Complex Float) IO (Complex Float, Complex Float)
-> IO (Complex Float, Complex Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Complex Float, Complex Float) IO (Complex Float, Complex Float)
 -> IO (Complex Float, Complex Float))
-> ContT
     (Complex Float, Complex Float) IO (Complex Float, Complex Float)
-> IO (Complex Float, Complex Float)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO (Complex Float, Complex Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
alphaPtr <- Complex Float
-> FortranIO (Complex Float, Complex Float) (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
alpha
      Ptr (Complex Float)
xPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Complex Float, Complex Float) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
x
      Ptr CInt
incxPtr <- Int -> FortranIO (Complex Float, Complex Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr (Complex Float)
tauPtr <- FortranIO (Complex Float, Complex Float) (Ptr (Complex Float))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Complex Float, Complex Float) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Complex Float, Complex Float) IO ())
-> IO () -> ContT (Complex Float, Complex Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> IO ()
FFI.larfgp Ptr CInt
nPtr Ptr (Complex Float)
alphaPtr Ptr (Complex Float)
xPtr Ptr CInt
incxPtr Ptr (Complex Float)
tauPtr
      IO (Complex Float, Complex Float)
-> ContT
     (Complex Float, Complex Float) IO (Complex Float, Complex Float)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Complex Float, Complex Float)
 -> ContT
      (Complex Float, Complex Float) IO (Complex Float, Complex Float))
-> IO (Complex Float, Complex Float)
-> ContT
     (Complex Float, Complex Float) IO (Complex Float, Complex Float)
forall a b. (a -> b) -> a -> b
$ (Complex Float -> Complex Float -> (Complex Float, Complex Float))
-> IO
     (Complex Float -> Complex Float -> (Complex Float, Complex Float))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Complex Float -> Complex Float -> (Complex Float, Complex Float))
-> IO (Complex Float)
-> IO (Complex Float -> (Complex Float, Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Float) -> IO (Complex Float)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Float)
alphaPtr
         IO (Complex Float -> (Complex Float, Complex Float))
-> IO (Complex Float) -> IO (Complex Float, Complex Float)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Float) -> IO (Complex Float)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Float)
tauPtr

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

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

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clargv.f>
largv ::
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ x -} ->
   Int {- ^ incx -} ->
   IOArray ZeroInt (Complex Float) {- ^ y -} ->
   Int {- ^ incy -} ->
   Int {- ^ incc -} ->
   IO (Array ZeroInt Float)
largv :: Int
-> IOArray ZeroInt (Complex Float)
-> Int
-> IOArray ZeroInt (Complex Float)
-> Int
-> Int
-> IO (Array ZeroInt Float)
largv Int
n IOArray ZeroInt (Complex Float)
x Int
incx IOArray ZeroInt (Complex Float)
y Int
incy Int
incc = do
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
x
   let yDim0 :: Int
yDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
y
   String -> Bool -> IO ()
Call.assert String
"largv: 1+(n-1)*incx == xDim0" (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
incx Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   String -> Bool -> IO ()
Call.assert String
"largv: 1+(n-1)*incy == yDim0" (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
incy Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
yDim0)
   IOArray ZeroInt Float
c <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
incc)
   ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
 -> IO (Array ZeroInt Float))
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
-> IO (Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
xPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt Float) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
x
      Ptr CInt
incxPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr (Complex Float)
yPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt Float) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
y
      Ptr CInt
incyPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
      Ptr Float
cPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
c
      Ptr CInt
inccPtr <- Int -> FortranIO (Array ZeroInt Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incc
      IO () -> ContT (Array ZeroInt Float) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float) IO ())
-> IO () -> ContT (Array ZeroInt Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.largv Ptr CInt
nPtr Ptr (Complex Float)
xPtr Ptr CInt
incxPtr Ptr (Complex Float)
yPtr Ptr CInt
incyPtr Ptr Float
cPtr Ptr CInt
inccPtr
      IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float)
 -> ContT (Array ZeroInt Float) IO (Array ZeroInt Float))
-> IO (Array ZeroInt Float)
-> ContT (Array ZeroInt Float) IO (Array ZeroInt Float)
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
c

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarnv.f>
larnv ::
   Int {- ^ idist -} ->
   IOArray ZeroInt CInt {- ^ iseed -} ->
   Int {- ^ n -} ->
   IO (Array ZeroInt (Complex Float))
larnv :: Int
-> IOArray ZeroInt CInt
-> Int
-> IO (Array ZeroInt (Complex Float))
larnv Int
idist IOArray ZeroInt CInt
iseed Int
n = do
   let iseedDim0 :: Int
iseedDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
iseed
   String -> Bool -> IO ()
Call.assert String
"larnv: 4 == iseedDim0" (Int
4 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
iseedDim0)
   IOArray ZeroInt (Complex Float)
x <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
-> IO (Array ZeroInt (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
 -> IO (Array ZeroInt (Complex Float)))
-> ContT
     (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
-> IO (Array ZeroInt (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
idistPtr <- Int -> FortranIO (Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
idist
      Ptr CInt
iseedPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iseed
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
xPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
x
      IO () -> ContT (Array ZeroInt (Complex Float)) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float)) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr (Complex Float) -> IO ()
FFI.larnv Ptr CInt
idistPtr Ptr CInt
iseedPtr Ptr CInt
nPtr Ptr (Complex Float)
xPtr
      IO (Array ZeroInt (Complex Float))
-> ContT
     (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float))
 -> ContT
      (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float)))
-> IO (Array ZeroInt (Complex Float))
-> ContT
     (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
x

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarrv.f>
larrv ::
   Float {- ^ vl -} ->
   Float {- ^ vu -} ->
   IOArray ZeroInt Float {- ^ d -} ->
   IOArray ZeroInt Float {- ^ l -} ->
   Float {- ^ pivmin -} ->
   Array ZeroInt CInt {- ^ isplit -} ->
   Int {- ^ m -} ->
   Int {- ^ dol -} ->
   Int {- ^ dou -} ->
   Float {- ^ minrgp -} ->
   Float {- ^ rtol1 -} ->
   Float {- ^ rtol2 -} ->
   IOArray ZeroInt Float {- ^ w -} ->
   IOArray ZeroInt Float {- ^ werr -} ->
   IOArray ZeroInt Float {- ^ wgap -} ->
   Array ZeroInt CInt {- ^ iblock -} ->
   Array ZeroInt CInt {- ^ indexw -} ->
   Array ZeroInt Float {- ^ gers -} ->
   Int {- ^ ldz -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
larrv :: Float
-> Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Array ZeroInt CInt
-> Int
-> Int
-> Int
-> Float
-> Float
-> Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Array ZeroInt Float
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
larrv Float
vl Float
vu IOArray ZeroInt Float
d IOArray ZeroInt Float
l Float
pivmin Array ZeroInt CInt
isplit Int
m Int
dol Int
dou Float
minrgp Float
rtol1 Float
rtol2 IOArray ZeroInt Float
w IOArray ZeroInt Float
werr IOArray ZeroInt Float
wgap Array ZeroInt CInt
iblock Array ZeroInt CInt
indexw Array ZeroInt Float
gers Int
ldz = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
   let lDim0 :: Int
lDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
l
   let isplitDim0 :: Int
isplitDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
isplit
   let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
w
   let werrDim0 :: Int
werrDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
werr
   let wgapDim0 :: Int
wgapDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
wgap
   let iblockDim0 :: Int
iblockDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
iblock
   let indexwDim0 :: Int
indexwDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
indexw
   let gersDim0 :: Int
gersDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
gers
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"larrv: n == lDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
lDim0)
   String -> Bool -> IO ()
Call.assert String
"larrv: n == isplitDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
isplitDim0)
   String -> Bool -> IO ()
Call.assert String
"larrv: n == wDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
   String -> Bool -> IO ()
Call.assert String
"larrv: n == werrDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
werrDim0)
   String -> Bool -> IO ()
Call.assert String
"larrv: n == wgapDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wgapDim0)
   String -> Bool -> IO ()
Call.assert String
"larrv: n == iblockDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
iblockDim0)
   String -> Bool -> IO ()
Call.assert String
"larrv: n == indexwDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
indexwDim0)
   String -> Bool -> IO ()
Call.assert String
"larrv: 2*n == gersDim0" (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
gersDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
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 Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
12Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
7Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt,
       Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Float
vlPtr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
      Ptr Float
vuPtr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
      Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
lPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
l
      Ptr Float
pivminPtr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
pivmin
      Ptr CInt
isplitPtr <- Array ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
isplit
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
dolPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
dol
      Ptr CInt
douPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
dou
      Ptr Float
minrgpPtr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
minrgp
      Ptr Float
rtol1Ptr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rtol1
      Ptr Float
rtol2Ptr <- Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rtol2
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr Float
werrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
werr
      Ptr Float
wgapPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
wgap
      Ptr CInt
iblockPtr <- Array ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
iblock
      Ptr CInt
indexwPtr <- Array ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
indexw
      Ptr Float
gersPtr <- Array ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
gers
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr CInt
isuppzPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isuppz
      Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.larrv Ptr CInt
nPtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr Float
dPtr Ptr Float
lPtr Ptr Float
pivminPtr Ptr CInt
isplitPtr Ptr CInt
mPtr Ptr CInt
dolPtr Ptr CInt
douPtr Ptr Float
minrgpPtr Ptr Float
rtol1Ptr Ptr Float
rtol2Ptr Ptr Float
wPtr Ptr Float
werrPtr Ptr Float
wgapPtr Ptr CInt
iblockPtr Ptr CInt
indexwPtr Ptr Float
gersPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr CInt
isuppzPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt,
       Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array ZeroInt CInt
 -> Int
 -> (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt,
     Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt,
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt,
       Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt,
       Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), 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) (Complex Float), Array ZeroInt CInt,
       Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), 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/clartg.f>
lartg ::
   Complex Float {- ^ f -} ->
   Complex Float {- ^ g -} ->
   IO (Float, Complex Float, Complex Float)
lartg :: Complex Float
-> Complex Float -> IO (Float, Complex Float, Complex Float)
lartg Complex Float
f Complex Float
g = do
   ContT
  (Float, Complex Float, Complex Float)
  IO
  (Float, Complex Float, Complex Float)
-> IO (Float, Complex Float, Complex Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Float, Complex Float, Complex Float)
   IO
   (Float, Complex Float, Complex Float)
 -> IO (Float, Complex Float, Complex Float))
-> ContT
     (Float, Complex Float, Complex Float)
     IO
     (Float, Complex Float, Complex Float)
-> IO (Float, Complex Float, Complex Float)
forall a b. (a -> b) -> a -> b
$ do
      Ptr (Complex Float)
fPtr <- Complex Float
-> FortranIO
     (Float, Complex Float, Complex Float) (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
f
      Ptr (Complex Float)
gPtr <- Complex Float
-> FortranIO
     (Float, Complex Float, Complex Float) (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
g
      Ptr Float
csPtr <- FortranIO (Float, Complex Float, Complex Float) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
snPtr <- FortranIO
  (Float, Complex Float, Complex Float) (Ptr (Complex Float))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
rPtr <- FortranIO
  (Float, Complex Float, Complex Float) (Ptr (Complex Float))
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Complex Float, Complex Float) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Complex Float, Complex Float) IO ())
-> IO () -> ContT (Float, Complex Float, Complex Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> IO ()
FFI.lartg Ptr (Complex Float)
fPtr Ptr (Complex Float)
gPtr Ptr Float
csPtr Ptr (Complex Float)
snPtr Ptr (Complex Float)
rPtr
      IO (Float, Complex Float, Complex Float)
-> ContT
     (Float, Complex Float, Complex Float)
     IO
     (Float, Complex Float, Complex Float)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Complex Float, Complex Float)
 -> ContT
      (Float, Complex Float, Complex Float)
      IO
      (Float, Complex Float, Complex Float))
-> IO (Float, Complex Float, Complex Float)
-> ContT
     (Float, Complex Float, Complex Float)
     IO
     (Float, Complex Float, Complex Float)
forall a b. (a -> b) -> a -> b
$ (Float
 -> Complex Float
 -> Complex Float
 -> (Float, Complex Float, Complex Float))
-> IO
     (Float
      -> Complex Float
      -> Complex Float
      -> (Float, Complex Float, Complex Float))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Float
   -> Complex Float
   -> Complex Float
   -> (Float, Complex Float, Complex Float))
-> IO Float
-> IO
     (Complex Float
      -> Complex Float -> (Float, Complex Float, Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
csPtr
         IO
  (Complex Float
   -> Complex Float -> (Float, Complex Float, Complex Float))
-> IO (Complex Float)
-> IO (Complex Float -> (Float, Complex Float, Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Float) -> IO (Complex Float)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Float)
snPtr
         IO (Complex Float -> (Float, Complex Float, Complex Float))
-> IO (Complex Float) -> IO (Float, Complex Float, Complex Float)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr (Complex Float) -> IO (Complex Float)
forall a. Storable a => Ptr a -> IO a
peek Ptr (Complex Float)
rPtr

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

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarz.f>
larz ::
   Char {- ^ side -} ->
   Int {- ^ m -} ->
   Int {- ^ l -} ->
   Array ZeroInt (Complex Float) {- ^ v -} ->
   Int {- ^ incv -} ->
   Complex Float {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO ()
larz :: Char
-> Int
-> Int
-> Array ZeroInt (Complex Float)
-> Int
-> Complex Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO ()
larz Char
side Int
m Int
l Array ZeroInt (Complex Float)
v Int
incv Complex Float
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
workSize = do
   let vDim0 :: Int
vDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
v
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   String -> Bool -> IO ()
Call.assert String
"larz: 1+(l-1)*abs(incv) == vDim0" (Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
lInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int -> Int
forall a. Num a => a -> a
abs(Int
incv) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
lPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
l
      Ptr (Complex Float)
vPtr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
v
      Ptr CInt
incvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incv
      Ptr (Complex Float)
tauPtr <- Complex Float -> FortranIO () (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
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 (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> IO ()
FFI.larz Ptr CChar
sidePtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
lPtr Ptr (Complex Float)
vPtr Ptr CInt
incvPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
workPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clarzb.f>
larzb ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Char {- ^ direct -} ->
   Char {- ^ storev -} ->
   Int {- ^ m -} ->
   Int {- ^ l -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ v -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ t -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ ldwork -} ->
   IO ()
larzb :: Char
-> Char
-> Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO ()
larzb Char
side Char
trans Char
direct Char
storev Int
m Int
l Array (ZeroInt, ZeroInt) (Complex Float)
v Array (ZeroInt, ZeroInt) (Complex Float)
t IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
ldwork = do
   let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
v
   let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
t
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let _nv :: Int
_nv = Int
vDim0
   let ldv :: Int
ldv = Int
vDim1
   let k :: Int
k = Int
tDim0
   let ldt :: Int
ldt = Int
tDim1
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   IOArray (ZeroInt, ZeroInt) (Complex Float)
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
k Int
ldwork
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
transPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
directPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
direct
      Ptr CChar
storevPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
storev
      Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr CInt
lPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
l
      Ptr (Complex Float)
vPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
v
      Ptr CInt
ldvPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr (Complex Float)
tPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
t
      Ptr CInt
ldtPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
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 (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.larzb Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CChar
directPtr Ptr CChar
storevPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
lPtr Ptr (Complex Float)
vPtr Ptr CInt
ldvPtr Ptr (Complex Float)
tPtr Ptr CInt
ldtPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
workPtr Ptr CInt
ldworkPtr

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

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clascl.f>
lascl ::
   Char {- ^ type_ -} ->
   Int {- ^ kl -} ->
   Int {- ^ ku -} ->
   Float {- ^ cfrom -} ->
   Float {- ^ cto -} ->
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Int)
lascl :: Char
-> Int
-> Int
-> Float
-> Float
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
lascl Char
type_ Int
kl Int
ku Float
cfrom Float
cto Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
type_Ptr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
type_
      Ptr CInt
klPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kl
      Ptr CInt
kuPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ku
      Ptr Float
cfromPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
cfrom
      Ptr Float
ctoPtr <- Float -> FortranIO Int (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
cto
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lascl Ptr CChar
type_Ptr Ptr CInt
klPtr Ptr CInt
kuPtr Ptr Float
cfromPtr Ptr Float
ctoPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
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/claset.f>
laset ::
   Char {- ^ uplo -} ->
   Int {- ^ m -} ->
   Int {- ^ n -} ->
   Complex Float {- ^ alpha -} ->
   Complex Float {- ^ beta -} ->
   Int {- ^ lda -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float))
laset :: Char
-> Int
-> Int
-> Complex Float
-> Complex Float
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
laset Char
uplo Int
m Int
n Complex Float
alpha Complex Float
beta Int
lda = do
   IOArray (ZeroInt, ZeroInt) (Complex Float)
a <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
lda
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float))
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float))
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float))
 -> IO (Array (ZeroInt, ZeroInt) (Complex Float)))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
mPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
alphaPtr <- Complex Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
alpha
      Ptr (Complex Float)
betaPtr <- Complex Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
beta
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO (Array (ZeroInt, ZeroInt) (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ())
-> IO () -> ContT (Array (ZeroInt, ZeroInt) (Complex Float)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.laset Ptr CChar
uploPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
alphaPtr Ptr (Complex Float)
betaPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr
      IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float))
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
a

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clasr.f>
lasr ::
   Char {- ^ side -} ->
   Char {- ^ pivot -} ->
   Char {- ^ direct -} ->
   Int {- ^ m -} ->
   Array ZeroInt Float {- ^ c -} ->
   Array ZeroInt Float {- ^ s -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO ()
lasr :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt Float
-> Array ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO ()
lasr Char
side Char
pivot Char
direct Int
m Array ZeroInt Float
c Array ZeroInt Float
s IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let cDim0 :: Int
cDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
c
   let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
s
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let _cSize :: Int
_cSize = Int
cDim0
   let _sSize :: Int
_sSize = Int
sDim0
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
pivotPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
pivot
      Ptr CChar
directPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
direct
      Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Float
cPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
c
      Ptr Float
sPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
s
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
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 Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.lasr Ptr CChar
sidePtr Ptr CChar
pivotPtr Ptr CChar
directPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr Float
cPtr Ptr Float
sPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/classq.f>
lassq ::
   Array ZeroInt (Complex Float) {- ^ x -} ->
   Int {- ^ incx -} ->
   Float {- ^ scale -} ->
   Float {- ^ sumsq -} ->
   IO (Float, Float)
lassq :: Array ZeroInt (Complex Float)
-> Int -> Float -> Float -> IO (Float, Float)
lassq Array ZeroInt (Complex Float)
x Int
incx Float
scale Float
sumsq = do
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
x
   let n :: Int
n = Int
xDim0
   ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float) IO (Float, Float) -> IO (Float, Float))
-> ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
xPtr <- Array ZeroInt (Complex Float)
-> FortranIO (Float, Float) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
x
      Ptr CInt
incxPtr <- Int -> FortranIO (Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr Float
scalePtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
scale
      Ptr Float
sumsqPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sumsq
      IO () -> ContT (Float, Float) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float) IO ())
-> IO () -> ContT (Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> IO ()
FFI.lassq Ptr CInt
nPtr Ptr (Complex Float)
xPtr Ptr CInt
incxPtr Ptr Float
scalePtr Ptr Float
sumsqPtr
      IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float) -> ContT (Float, Float) IO (Float, Float))
-> IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> (Float, Float))
-> IO (Float -> Float -> (Float, Float))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Float -> (Float, Float))
-> IO Float -> IO (Float -> (Float, Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
         IO (Float -> (Float, Float)) -> IO Float -> IO (Float, Float)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
sumsqPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/claswp.f>
laswp ::
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ k1 -} ->
   Int {- ^ k2 -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Int {- ^ incx -} ->
   IO ()
laswp :: IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int -> Int -> Array ZeroInt CInt -> Int -> IO ()
laswp IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
k1 Int
k2 Array ZeroInt CInt
ipiv Int
incx = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"laswp: k1+(k2-k1)*abs(incx) == ipivDim0" (Int
k1Int -> Int -> Int
forall a. Num a => a -> a -> a
+(Int
k2Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
k1)Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int -> Int
forall a. Num a => a -> a
abs(Int
incx) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
k1Ptr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k1
      Ptr CInt
k2Ptr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k2
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO () (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      IO () -> ContT () IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.laswp Ptr CInt
nPtr Ptr (Complex Float)
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/clasyf.f>
lasyf ::
   Char {- ^ uplo -} ->
   Int {- ^ nb -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ ldw -} ->
   IO (Int, Array ZeroInt CInt, Array (ZeroInt,ZeroInt) (Complex Float), Int)
lasyf :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
lasyf Char
uplo Int
nb IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
ldw = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
w <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldw
   ContT
  (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  IO
  (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
   IO
   (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> IO
      (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nbPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
      Ptr CInt
kbPtr <- FortranIO
  (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
wPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
w
      Ptr CInt
ldwPtr <- Int
-> FortranIO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldw
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.lasyf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nbPtr Ptr CInt
kbPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
wPtr Ptr CInt
ldwPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
   Int)
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
    Int)
 -> ContT
      (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
       Int)
      IO
      (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
       Int))
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
-> ContT
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
     IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex Float),
      Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt CInt
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Int, Array ZeroInt CInt,
     Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Int
      -> Array ZeroInt CInt
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Int, Array ZeroInt CInt,
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Int
   -> Array ZeroInt CInt
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Int, Array ZeroInt CInt,
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt CInt
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Int, Array ZeroInt CInt,
          Array (ZeroInt, ZeroInt) (Complex 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
kbPtr)
         IO
  (Array ZeroInt CInt
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Int, Array ZeroInt CInt,
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Int, Array ZeroInt CInt,
          Array (ZeroInt, ZeroInt) (Complex Float), 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) (Complex Float)
   -> Int
   -> (Int, Array ZeroInt CInt,
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Int, Array ZeroInt CInt,
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
w
         IO
  (Int
   -> (Int, Array ZeroInt CInt,
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int
-> IO
     (Int, Array ZeroInt CInt, Array (ZeroInt, ZeroInt) (Complex 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/clatbs.f>
latbs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Char {- ^ normin -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IOArray ZeroInt (Complex Float) {- ^ x -} ->
   IOArray ZeroInt Float {- ^ cnorm -} ->
   IO (Float, Int)
latbs :: Char
-> Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt Float
-> IO (Float, Int)
latbs Char
uplo Char
trans Char
diag Char
normin Int
kd Array (ZeroInt, ZeroInt) (Complex Float)
ab IOArray ZeroInt (Complex Float)
x IOArray ZeroInt Float
cnorm = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
x
   let cnormDim0 :: Int
cnormDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
cnorm
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   String -> Bool -> IO ()
Call.assert String
"latbs: n == xDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   String -> Bool -> IO ()
Call.assert String
"latbs: n == cnormDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cnormDim0)
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
transPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
diagPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CChar
norminPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
normin
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr (Complex Float)
xPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
x
      Ptr Float
scalePtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
cnormPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
cnorm
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.latbs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CChar
norminPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr (Complex Float)
xPtr Ptr Float
scalePtr Ptr Float
cnormPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clatdf.f>
latdf ::
   Int {- ^ ijob -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   IOArray ZeroInt (Complex Float) {- ^ rhs -} ->
   Float {- ^ rdsum -} ->
   Float {- ^ rdscal -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array ZeroInt CInt {- ^ jpiv -} ->
   IO (Float, Float)
latdf :: Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> Float
-> Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> IO (Float, Float)
latdf Int
ijob Array (ZeroInt, ZeroInt) (Complex Float)
z IOArray ZeroInt (Complex Float)
rhs Float
rdsum Float
rdscal Array ZeroInt CInt
ipiv Array ZeroInt CInt
jpiv = do
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
z
   let rhsDim0 :: Int
rhsDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
rhs
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let jpivDim0 :: Int
jpivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
jpiv
   let n :: Int
n = Int
zDim0
   let ldz :: Int
ldz = Int
zDim1
   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 (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float) IO (Float, Float) -> IO (Float, Float))
-> ContT (Float, Float) IO (Float, Float) -> IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
ijobPtr <- Int -> FortranIO (Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
zPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Float) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int -> FortranIO (Float, Float) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
rhsPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Float) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
rhs
      Ptr Float
rdsumPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rdsum
      Ptr Float
rdscalPtr <- Float -> FortranIO (Float, Float) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rdscal
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Float, Float) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr CInt
jpivPtr <- Array ZeroInt CInt -> FortranIO (Float, Float) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
jpiv
      IO () -> ContT (Float, Float) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float) IO ())
-> IO () -> ContT (Float, Float) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.latdf Ptr CInt
ijobPtr Ptr CInt
nPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
rhsPtr Ptr Float
rdsumPtr Ptr Float
rdscalPtr Ptr CInt
ipivPtr Ptr CInt
jpivPtr
      IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float) -> ContT (Float, Float) IO (Float, Float))
-> IO (Float, Float) -> ContT (Float, Float) IO (Float, Float)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> (Float, Float))
-> IO (Float -> Float -> (Float, Float))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Float -> (Float, Float))
-> IO Float -> IO (Float -> (Float, Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rdsumPtr
         IO (Float -> (Float, Float)) -> IO Float -> IO (Float, Float)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rdscalPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clatps.f>
latps ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Char {- ^ normin -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   IOArray ZeroInt (Complex Float) {- ^ x -} ->
   IOArray ZeroInt Float {- ^ cnorm -} ->
   IO (Float, Int)
latps :: Char
-> Char
-> Char
-> Char
-> Array ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt Float
-> IO (Float, Int)
latps Char
uplo Char
trans Char
diag Char
normin Array ZeroInt (Complex Float)
ap IOArray ZeroInt (Complex Float)
x IOArray ZeroInt Float
cnorm = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
x
   let cnormDim0 :: Int
cnormDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
cnorm
   let n :: Int
n = Int
xDim0
   String -> Bool -> IO ()
Call.assert String
"latps: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"latps: n == cnormDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cnormDim0)
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
transPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
diagPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CChar
norminPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
normin
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
xPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
x
      Ptr Float
scalePtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
cnormPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
cnorm
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.latps Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CChar
norminPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
xPtr Ptr Float
scalePtr Ptr Float
cnormPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clatrd.f>
latrd ::
   Char {- ^ uplo -} ->
   Int {- ^ nb -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ ldw -} ->
   IO (Array ZeroInt Float, Array ZeroInt (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float))
latrd :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
latrd Char
uplo Int
nb IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
ldw = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
e <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
w <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nb Int
ldw
   ContT
  (Array ZeroInt Float, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
  IO
  (Array ZeroInt Float, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
   IO
   (Array ZeroInt Float, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
 -> IO
      (Array ZeroInt Float, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> ContT
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
wPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
w
      Ptr CInt
ldwPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldw
      IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.latrd Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nbPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
ePtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
wPtr Ptr CInt
ldwPtr
      IO
  (Array ZeroInt Float, Array ZeroInt (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array ZeroInt (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float))
 -> ContT
      (Array ZeroInt Float, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float))
      IO
      (Array ZeroInt Float, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
-> ContT
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
     IO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> (Array ZeroInt Float, Array ZeroInt (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array ZeroInt Float, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array ZeroInt Float, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array ZeroInt Float, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
e
         IO
  (Array ZeroInt (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array ZeroInt Float, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> (Array ZeroInt Float, Array ZeroInt (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> (Array ZeroInt Float, Array ZeroInt (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float)))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt Float, Array ZeroInt (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
w

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clatrs.f>
latrs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Char {- ^ normin -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray ZeroInt (Complex Float) {- ^ x -} ->
   IOArray ZeroInt Float {- ^ cnorm -} ->
   IO (Float, Int)
latrs :: Char
-> Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt Float
-> IO (Float, Int)
latrs Char
uplo Char
trans Char
diag Char
normin Array (ZeroInt, ZeroInt) (Complex Float)
a IOArray ZeroInt (Complex Float)
x IOArray ZeroInt Float
cnorm = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
x
   let cnormDim0 :: Int
cnormDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
cnorm
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"latrs: n == xDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   String -> Bool -> IO ()
Call.assert String
"latrs: n == cnormDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cnormDim0)
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
transPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
diagPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CChar
norminPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
normin
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
xPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
x
      Ptr Float
scalePtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
cnormPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
cnorm
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.latrs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CChar
norminPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
xPtr Ptr Float
scalePtr Ptr Float
cnormPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clatrz.f>
latrz ::
   Int {- ^ m -} ->
   Int {- ^ l -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt (Complex Float))
latrz :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt (Complex Float))
latrz Int
m Int
l IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   ContT
  (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
-> IO (Array ZeroInt (Complex Float))
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
 -> IO (Array ZeroInt (Complex Float)))
-> ContT
     (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
-> IO (Array ZeroInt (Complex Float))
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
lPtr <- Int -> FortranIO (Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
l
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float)) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt (Complex Float)) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      IO () -> ContT (Array ZeroInt (Complex Float)) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float)) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float)) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> IO ()
FFI.latrz Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
lPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr
      IO (Array ZeroInt (Complex Float))
-> ContT
     (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float))
 -> ContT
      (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float)))
-> IO (Array ZeroInt (Complex Float))
-> ContT
     (Array ZeroInt (Complex Float)) IO (Array ZeroInt (Complex Float))
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clauu2.f>
lauu2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Int)
lauu2 :: Char -> IOArray (ZeroInt, ZeroInt) (Complex Float) -> IO Int
lauu2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt -> Ptr (Complex Float) -> Ptr CInt -> Ptr CInt -> IO ()
FFI.lauu2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
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/clauum.f>
lauum ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Int)
lauum :: Char -> IOArray (ZeroInt, ZeroInt) (Complex Float) -> IO Int
lauum Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt -> Ptr (Complex Float) -> Ptr CInt -> Ptr CInt -> IO ()
FFI.lauum Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
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/cpbcon.f>
pbcon ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Float {- ^ anorm -} ->
   IO (Float, Int)
pbcon :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> IO (Float, Int)
pbcon Char
uplo Int
kd Array (ZeroInt, ZeroInt) (Complex Float)
ab Float
anorm = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
      Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.pbcon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbequ.f>
pbequ ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IO (Array ZeroInt Float, Float, Float, Int)
pbequ :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Float, Float, Int)
pbequ Char
uplo Int
kd Array (ZeroInt, ZeroInt) (Complex Float)
ab = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Float, Float, Int)
  IO
  (Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Float, Float, Int)
   IO
   (Array ZeroInt Float, Float, Float, Int)
 -> IO (Array ZeroInt Float, Float, Float, Int))
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr Float
scondPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
amaxPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.pbequ Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float, Float, Int)
 -> ContT
      (Array ZeroInt Float, Float, Float, Int)
      IO
      (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Float
 -> Float
 -> Int
 -> (Array ZeroInt Float, Float, Float, Int))
-> IO
     (Array ZeroInt Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
         IO
  (Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float
-> IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scondPtr
         IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float -> IO (Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
         IO (Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Float, Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbrfs.f>
pbrfs ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ afb -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
pbrfs :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
pbrfs Char
uplo Int
kd Array (ZeroInt, ZeroInt) (Complex Float)
ab Array (ZeroInt, ZeroInt) (Complex Float)
afb Array (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
x = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
afbDim0,Int
afbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
afb
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let ldafb :: Int
ldafb = Int
afbDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"pbrfs: n == afbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afbDim0)
   String -> Bool -> IO ()
Call.assert String
"pbrfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr (Complex Float)
afbPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
afb
      Ptr CInt
ldafbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldafb
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.pbrfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr (Complex Float)
afbPtr Ptr CInt
ldafbPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpbstf.f>
pbstf ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IO (Int)
pbstf :: Char -> Int -> IOArray (ZeroInt, ZeroInt) (Complex Float) -> IO Int
pbstf Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Float)
ab = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbstf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Float)
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/cpbsv.f>
pbsv ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
pbsv :: Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
pbsv Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Float)
ab IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbsv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr (Complex Float)
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/cpbsvx.f>
pbsvx ::
   Char {- ^ fact -} ->
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ afb -} ->
   Char {- ^ equed -} ->
   IOArray ZeroInt Float {- ^ s -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Char, Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)
pbsvx :: Char
-> Char
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Char
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
pbsvx Char
fact Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Float)
ab IOArray (ZeroInt, ZeroInt) (Complex Float)
afb Char
equed IOArray ZeroInt Float
s IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
ldx = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
afbDim0,Int
afbDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
afb
   let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
s
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let ldafb :: Int
ldafb = Int
afbDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"pbsvx: n == afbDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afbDim0)
   String -> Bool -> IO ()
Call.assert String
"pbsvx: n == sDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
factPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr (Complex Float)
afbPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
afb
      Ptr CInt
ldafbPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldafb
      Ptr CChar
equedPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
rcondPtr <- FortranIO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CChar
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.pbsvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr (Complex Float)
afbPtr Ptr CInt
ldafbPtr Ptr CChar
equedPtr Ptr Float
sPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Char
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
     Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Char
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Char
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Char
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, 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) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
         IO
  (Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO
  (Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array 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/cpbtf2.f>
pbtf2 ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IO (Int)
pbtf2 :: Char -> Int -> IOArray (ZeroInt, ZeroInt) (Complex Float) -> IO Int
pbtf2 Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Float)
ab = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbtf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Float)
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/cpbtrf.f>
pbtrf ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IO (Int)
pbtrf :: Char -> Int -> IOArray (ZeroInt, ZeroInt) (Complex Float) -> IO Int
pbtrf Char
uplo Int
kd IOArray (ZeroInt, ZeroInt) (Complex Float)
ab = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr (Complex Float)
abPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbtrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Float)
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/cpbtrs.f>
pbtrs ::
   Char {- ^ uplo -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
pbtrs :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
pbtrs Char
uplo Int
kd Array (ZeroInt, ZeroInt) (Complex Float)
ab IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pbtrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr (Complex Float)
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/cpftrf.f>
pftrf ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ a -} ->
   IO (Int)
pftrf :: Char -> Char -> Int -> IOArray ZeroInt (Complex Float) -> IO Int
pftrf Char
transr Char
uplo Int
n IOArray ZeroInt (Complex Float)
a = do
   let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
a
   String -> Bool -> IO ()
Call.assert String
"pftrf: n*(n+1)`div`2 == aDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transrPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
a
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.pftrf Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
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/cpftri.f>
pftri ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ a -} ->
   IO (Int)
pftri :: Char -> Char -> Int -> IOArray ZeroInt (Complex Float) -> IO Int
pftri Char
transr Char
uplo Int
n IOArray ZeroInt (Complex Float)
a = do
   let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
a
   String -> Bool -> IO ()
Call.assert String
"pftri: n*(n+1)`div`2 == aDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transrPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
a
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.pftri Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
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/cpftrs.f>
pftrs ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
pftrs :: Char
-> Char
-> Int
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
pftrs Char
transr Char
uplo Int
n Array ZeroInt (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"pftrs: n*(n+1)`div`2 == aDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transrPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
a
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pftrs Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr (Complex Float)
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/cpocon.f>
pocon ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Float {- ^ anorm -} ->
   IO (Float, Int)
pocon :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> IO (Float, Int)
pocon Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a Float
anorm = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
      Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.pocon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpoequ.f>
poequ ::
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt Float, Float, Float, Int)
poequ :: Array (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Float, Float, Int)
poequ Array (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Float, Float, Int)
  IO
  (Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Float, Float, Int)
   IO
   (Array ZeroInt Float, Float, Float, Int)
 -> IO (Array ZeroInt Float, Float, Float, Int))
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr Float
scondPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
amaxPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.poequ Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float, Float, Int)
 -> ContT
      (Array ZeroInt Float, Float, Float, Int)
      IO
      (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Float
 -> Float
 -> Int
 -> (Array ZeroInt Float, Float, Float, Int))
-> IO
     (Array ZeroInt Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
         IO
  (Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float
-> IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scondPtr
         IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float -> IO (Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
         IO (Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Float, Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpoequb.f>
poequb ::
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt Float, Float, Float, Int)
poequb :: Array (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Float, Float, Int)
poequb Array (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Float, Float, Int)
  IO
  (Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Float, Float, Int)
   IO
   (Array ZeroInt Float, Float, Float, Int)
 -> IO (Array ZeroInt Float, Float, Float, Int))
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr Float
scondPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
amaxPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.poequb Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float, Float, Int)
 -> ContT
      (Array ZeroInt Float, Float, Float, Int)
      IO
      (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Float
 -> Float
 -> Int
 -> (Array ZeroInt Float, Float, Float, Int))
-> IO
     (Array ZeroInt Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
         IO
  (Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float
-> IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scondPtr
         IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float -> IO (Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
         IO (Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Float, Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cporfs.f>
porfs ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
porfs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
porfs Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a Array (ZeroInt, ZeroInt) (Complex Float)
af Array (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
x = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
afDim0,Int
afDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
af
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldaf :: Int
ldaf = Int
afDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"porfs: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
   String -> Bool -> IO ()
Call.assert String
"porfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
afPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
af
      Ptr CInt
ldafPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.porfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
afPtr Ptr CInt
ldafPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cposv.f>
posv ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
posv :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
posv Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.posv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
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/cposvx.f>
posvx ::
   Char {- ^ fact -} ->
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->
   Char {- ^ equed -} ->
   IOArray ZeroInt Float {- ^ s -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Char, Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)
posvx :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Char
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
posvx Char
fact Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
af Char
equed IOArray ZeroInt Float
s IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
ldx = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
afDim0,Int
afDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
af
   let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
s
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldaf :: Int
ldaf = Int
afDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"posvx: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
   String -> Bool -> IO ()
Call.assert String
"posvx: n == sDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
factPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
afPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
af
      Ptr CInt
ldafPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
      Ptr CChar
equedPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
rcondPtr <- FortranIO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CChar
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.posvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
afPtr Ptr CInt
ldafPtr Ptr CChar
equedPtr Ptr Float
sPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Char
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
     Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Char
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Char
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Char
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, 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) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
         IO
  (Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO
  (Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array 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/cpotf2.f>
potf2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Int)
potf2 :: Char -> IOArray (ZeroInt, ZeroInt) (Complex Float) -> IO Int
potf2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt -> Ptr (Complex Float) -> Ptr CInt -> Ptr CInt -> IO ()
FFI.potf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
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/cpotrf.f>
potrf ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Int)
potrf :: Char -> IOArray (ZeroInt, ZeroInt) (Complex Float) -> IO Int
potrf Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt -> Ptr (Complex Float) -> Ptr CInt -> Ptr CInt -> IO ()
FFI.potrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
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/cpotri.f>
potri ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Int)
potri :: Char -> IOArray (ZeroInt, ZeroInt) (Complex Float) -> IO Int
potri Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt -> Ptr (Complex Float) -> Ptr CInt -> Ptr CInt -> IO ()
FFI.potri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
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/cpotrs.f>
potrs ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
potrs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
potrs Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.potrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
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/cppcon.f>
ppcon ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Float {- ^ anorm -} ->
   IO (Float, Int)
ppcon :: Char
-> Int -> Array ZeroInt (Complex Float) -> Float -> IO (Float, Int)
ppcon Char
uplo Int
n Array ZeroInt (Complex Float)
ap Float
anorm = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"ppcon: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
      Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ppcon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cppequ.f>
ppequ ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   IO (Array ZeroInt Float, Float, Float, Int)
ppequ :: Char
-> Int
-> Array ZeroInt (Complex Float)
-> IO (Array ZeroInt Float, Float, Float, Int)
ppequ Char
uplo Int
n Array ZeroInt (Complex Float)
ap = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"ppequ: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Float, Float, Int)
  IO
  (Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Float, Float, Int)
   IO
   (Array ZeroInt Float, Float, Float, Int)
 -> IO (Array ZeroInt Float, Float, Float, Int))
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr Float
scondPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
amaxPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ppequ Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float, Float, Int)
 -> ContT
      (Array ZeroInt Float, Float, Float, Int)
      IO
      (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Float
 -> Float
 -> Int
 -> (Array ZeroInt Float, Float, Float, Int))
-> IO
     (Array ZeroInt Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
         IO
  (Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float
-> IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scondPtr
         IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float -> IO (Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
         IO (Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Float, Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpprfs.f>
pprfs ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt (Complex Float) {- ^ afp -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
pprfs :: Char
-> Int
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
pprfs Char
uplo Int
n Array ZeroInt (Complex Float)
ap Array ZeroInt (Complex Float)
afp Array (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
x = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let afpDim0 :: Int
afpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
afp
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"pprfs: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"pprfs: n*(n+1)`div`2 == afpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afpDim0)
   String -> Bool -> IO ()
Call.assert String
"pprfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
afpPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
afp
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.pprfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
afpPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cppsv.f>
ppsv ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
ppsv :: Char
-> Int
-> IOArray ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
ppsv Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"ppsv: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ppsv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
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/cppsvx.f>
ppsvx ::
   Char {- ^ fact -} ->
   Char {- ^ uplo -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   IOArray ZeroInt (Complex Float) {- ^ afp -} ->
   Char {- ^ equed -} ->
   IOArray ZeroInt Float {- ^ s -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Char, Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)
ppsvx :: Char
-> Char
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> Char
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
ppsvx Char
fact Char
uplo IOArray ZeroInt (Complex Float)
ap IOArray ZeroInt (Complex Float)
afp Char
equed IOArray ZeroInt Float
s IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
ldx = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   let afpDim0 :: Int
afpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
afp
   let sDim0 :: Int
sDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
s
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
sDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"ppsvx: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"ppsvx: n*(n+1)`div`2 == afpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afpDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
factPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
afpPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
afp
      Ptr CChar
equedPtr <- Char
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
equed
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
rcondPtr <- FortranIO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CChar
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ppsvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
afpPtr Ptr CChar
equedPtr Ptr Float
sPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Char
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
     Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Char
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Char
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Char
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, 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) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
         IO
  (Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO
  (Int
   -> (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Char, Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array 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/cpptrf.f>
pptrf ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   IO (Int)
pptrf :: Char -> Int -> IOArray ZeroInt (Complex Float) -> IO Int
pptrf Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"pptrf: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> Ptr CInt -> Ptr (Complex Float) -> Ptr CInt -> IO ()
FFI.pptrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
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/cpptri.f>
pptri ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   IO (Int)
pptri :: Char -> Int -> IOArray ZeroInt (Complex Float) -> IO Int
pptri Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"pptri: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar -> Ptr CInt -> Ptr (Complex Float) -> Ptr CInt -> IO ()
FFI.pptri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
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/cpptrs.f>
pptrs ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
pptrs :: Char
-> Int
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
pptrs Char
uplo Int
n Array ZeroInt (Complex Float)
ap IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"pptrs: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pptrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
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/cpstf2.f>
pstf2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Float {- ^ tol -} ->
   IO (Array ZeroInt CInt, Int, Int)
pstf2 :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> IO (Array ZeroInt CInt, Int, Int)
pstf2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Float
tol = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt CInt
piv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
-> IO (Array ZeroInt CInt, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
 -> IO (Array ZeroInt CInt, Int, Int))
-> ContT
     (Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
-> IO (Array ZeroInt CInt, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
pivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
piv
      Ptr CInt
rankPtr <- FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
tolPtr <- Float -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tol
      Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.pstf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
pivPtr Ptr CInt
rankPtr Ptr Float
tolPtr Ptr Float
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int, Int)
-> ContT
     (Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
forall (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/cpstrf.f>
pstrf ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Float {- ^ tol -} ->
   IO (Array ZeroInt CInt, Int, Int)
pstrf :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> IO (Array ZeroInt CInt, Int, Int)
pstrf Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Float
tol = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt CInt
piv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
-> IO (Array ZeroInt CInt, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
 -> IO (Array ZeroInt CInt, Int, Int))
-> ContT
     (Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
-> IO (Array ZeroInt CInt, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
pivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
piv
      Ptr CInt
rankPtr <- FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
tolPtr <- Float -> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tol
      Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt CInt, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.pstrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
pivPtr Ptr CInt
rankPtr Ptr Float
tolPtr Ptr Float
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int, Int)
-> ContT
     (Array ZeroInt CInt, Int, Int) IO (Array ZeroInt CInt, Int, Int)
forall (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/cptcon.f>
ptcon ::
   Array ZeroInt Float {- ^ d -} ->
   Array ZeroInt (Complex Float) {- ^ e -} ->
   Float {- ^ anorm -} ->
   IO (Float, Int)
ptcon :: Array ZeroInt Float
-> Array ZeroInt (Complex Float) -> Float -> IO (Float, Int)
ptcon Array ZeroInt Float
d Array ZeroInt (Complex Float)
e Float
anorm = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
e
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"ptcon: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
      Ptr (Complex Float)
ePtr <- Array ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
e
      Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
      Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ptcon Ptr CInt
nPtr Ptr Float
dPtr Ptr (Complex Float)
ePtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cpteqr.f>
pteqr ::
   Char {- ^ compz -} ->
   IOArray ZeroInt Float {- ^ d -} ->
   IOArray ZeroInt Float {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   IO (Int)
pteqr :: Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
pteqr Char
compz IOArray ZeroInt Float
d IOArray ZeroInt Float
e IOArray (ZeroInt, ZeroInt) (Complex Float)
z = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let n :: Int
n = Int
dDim0
   let ldz :: Int
ldz = Int
zDim1
   String -> Bool -> IO ()
Call.assert String
"pteqr: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"pteqr: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
4Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
compzPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.pteqr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr Float
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/cptrfs.f>
ptrfs ::
   Char {- ^ uplo -} ->
   Array ZeroInt Float {- ^ d -} ->
   Array ZeroInt (Complex Float) {- ^ e -} ->
   Array ZeroInt Float {- ^ df -} ->
   Array ZeroInt (Complex Float) {- ^ ef -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
ptrfs :: Char
-> Array ZeroInt Float
-> Array ZeroInt (Complex Float)
-> Array ZeroInt Float
-> Array ZeroInt (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
ptrfs Char
uplo Array ZeroInt Float
d Array ZeroInt (Complex Float)
e Array ZeroInt Float
df Array ZeroInt (Complex Float)
ef Array (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
x = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
e
   let dfDim0 :: Int
dfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
df
   let efDim0 :: Int
efDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ef
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x
   let n :: Int
n = Int
dDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"ptrfs: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"ptrfs: n == dfDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dfDim0)
   String -> Bool -> IO ()
Call.assert String
"ptrfs: n-1 == efDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
efDim0)
   String -> Bool -> IO ()
Call.assert String
"ptrfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
      Ptr (Complex Float)
ePtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
e
      Ptr Float
dfPtr <- Array ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
df
      Ptr (Complex Float)
efPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ef
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ptrfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dPtr Ptr (Complex Float)
ePtr Ptr Float
dfPtr Ptr (Complex Float)
efPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cptsv.f>
ptsv ::
   IOArray ZeroInt Float {- ^ d -} ->
   IOArray ZeroInt (Complex Float) {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
ptsv :: IOArray ZeroInt Float
-> IOArray ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
ptsv IOArray ZeroInt Float
d IOArray ZeroInt (Complex Float)
e IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
e
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
dDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"ptsv: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr (Complex Float)
ePtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
e
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ptsv Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dPtr Ptr (Complex Float)
ePtr Ptr (Complex Float)
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/cptsvx.f>
ptsvx ::
   Char {- ^ fact -} ->
   Array ZeroInt Float {- ^ d -} ->
   Array ZeroInt (Complex Float) {- ^ e -} ->
   IOArray ZeroInt Float {- ^ df -} ->
   IOArray ZeroInt (Complex Float) {- ^ ef -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)
ptsvx :: Char
-> Array ZeroInt Float
-> Array ZeroInt (Complex Float)
-> IOArray ZeroInt Float
-> IOArray ZeroInt (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
ptsvx Char
fact Array ZeroInt Float
d Array ZeroInt (Complex Float)
e IOArray ZeroInt Float
df IOArray ZeroInt (Complex Float)
ef Array (ZeroInt, ZeroInt) (Complex Float)
b Int
ldx = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
e
   let dfDim0 :: Int
dfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
df
   let efDim0 :: Int
efDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ef
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
dDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"ptsvx: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"ptsvx: n == dfDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dfDim0)
   String -> Bool -> IO ()
Call.assert String
"ptsvx: n-1 == efDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
efDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
factPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
      Ptr (Complex Float)
ePtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
e
      Ptr Float
dfPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
df
      Ptr (Complex Float)
efPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ef
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
rcondPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.ptsvx Ptr CChar
factPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dPtr Ptr (Complex Float)
ePtr Ptr Float
dfPtr Ptr (Complex Float)
efPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
     Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
         IO
  (Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO
  (Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array 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/cpttrf.f>
pttrf ::
   IOArray ZeroInt Float {- ^ d -} ->
   IOArray ZeroInt (Complex Float) {- ^ e -} ->
   IO (Int)
pttrf :: IOArray ZeroInt Float -> IOArray ZeroInt (Complex Float) -> IO Int
pttrf IOArray ZeroInt Float
d IOArray ZeroInt (Complex Float)
e = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
e
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"pttrf: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr (Complex Float)
ePtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
e
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr Float -> Ptr (Complex Float) -> Ptr CInt -> IO ()
FFI.pttrf Ptr CInt
nPtr Ptr Float
dPtr Ptr (Complex Float)
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/cpttrs.f>
pttrs ::
   Char {- ^ uplo -} ->
   Array ZeroInt Float {- ^ d -} ->
   Array ZeroInt (Complex Float) {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
pttrs :: Char
-> Array ZeroInt Float
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
pttrs Char
uplo Array ZeroInt Float
d Array ZeroInt (Complex Float)
e IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
e
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
dDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"pttrs: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
      Ptr (Complex Float)
ePtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
e
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.pttrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dPtr Ptr (Complex Float)
ePtr Ptr (Complex Float)
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/cptts2.f>
ptts2 ::
   Int {- ^ iuplo -} ->
   Array ZeroInt Float {- ^ d -} ->
   Array ZeroInt (Complex Float) {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO ()
ptts2 :: Int
-> Array ZeroInt Float
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO ()
ptts2 Int
iuplo Array ZeroInt Float
d Array ZeroInt (Complex Float)
e IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
e
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
dDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"ptts2: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
iuploPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iuplo
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr Float
dPtr <- Array ZeroInt Float -> FortranIO () (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
      Ptr (Complex Float)
ePtr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
e
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
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 Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.ptts2 Ptr CInt
iuploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr Float
dPtr Ptr (Complex Float)
ePtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/crot.f>
rot ::
   IOArray ZeroInt (Complex Float) {- ^ cx -} ->
   Int {- ^ incx -} ->
   IOArray ZeroInt (Complex Float) {- ^ cy -} ->
   Int {- ^ incy -} ->
   Float {- ^ c -} ->
   Complex Float {- ^ s -} ->
   IO ()
rot :: IOArray ZeroInt (Complex Float)
-> Int
-> IOArray ZeroInt (Complex Float)
-> Int
-> Float
-> Complex Float
-> IO ()
rot IOArray ZeroInt (Complex Float)
cx Int
incx IOArray ZeroInt (Complex Float)
cy Int
incy Float
c Complex Float
s = do
   let cxDim0 :: Int
cxDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
cx
   let cyDim0 :: Int
cyDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
cy
   let n :: Int
n = Int
cxDim0
   String -> Bool -> IO ()
Call.assert String
"rot: n == cyDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cyDim0)
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
cxPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
cx
      Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr (Complex Float)
cyPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
cy
      Ptr CInt
incyPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
      Ptr Float
cPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
c
      Ptr (Complex Float)
sPtr <- Complex Float -> FortranIO () (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
s
      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 (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> IO ()
FFI.rot Ptr CInt
nPtr Ptr (Complex Float)
cxPtr Ptr CInt
incxPtr Ptr (Complex Float)
cyPtr Ptr CInt
incyPtr Ptr Float
cPtr Ptr (Complex Float)
sPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csrscl.f>
rscl ::
   Int {- ^ n -} ->
   Float {- ^ sa -} ->
   IOArray ZeroInt (Complex Float) {- ^ sx -} ->
   Int {- ^ incx -} ->
   IO ()
rscl :: Int -> Float -> IOArray ZeroInt (Complex Float) -> Int -> IO ()
rscl Int
n Float
sa IOArray ZeroInt (Complex Float)
sx Int
incx = do
   let sxDim0 :: Int
sxDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
sx
   let _sxSize :: Int
_sxSize = Int
sxDim0
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Float
saPtr <- Float -> FortranIO () (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
sa
      Ptr (Complex Float)
sxPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
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 Float -> Ptr (Complex Float) -> Ptr CInt -> IO ()
FFI.rscl Ptr CInt
nPtr Ptr Float
saPtr Ptr (Complex Float)
sxPtr Ptr CInt
incxPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cspcon.f>
spcon ::
   Char {- ^ uplo -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Float {- ^ anorm -} ->
   IO (Float, Int)
spcon :: Char
-> Array ZeroInt (Complex Float)
-> Array ZeroInt CInt
-> Float
-> IO (Float, Int)
spcon Char
uplo Array ZeroInt (Complex Float)
ap Array ZeroInt CInt
ipiv Float
anorm = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
ipivDim0
   String -> Bool -> IO ()
Call.assert String
"spcon: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
      Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.spcon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr CInt
ipivPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cspmv.f>
spmv ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Complex Float {- ^ alpha -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt (Complex Float) {- ^ x -} ->
   Int {- ^ incx -} ->
   Complex Float {- ^ beta -} ->
   IOArray ZeroInt (Complex Float) {- ^ y -} ->
   Int {- ^ incy -} ->
   IO ()
spmv :: Char
-> Int
-> Complex Float
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Int
-> Complex Float
-> IOArray ZeroInt (Complex Float)
-> Int
-> IO ()
spmv Char
uplo Int
n Complex Float
alpha Array ZeroInt (Complex Float)
ap Array ZeroInt (Complex Float)
x Int
incx Complex Float
beta IOArray ZeroInt (Complex Float)
y Int
incy = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
x
   let yDim0 :: Int
yDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
y
   let _apSize :: Int
_apSize = Int
apDim0
   let _xSize :: Int
_xSize = Int
xDim0
   let _ySize :: Int
_ySize = Int
yDim0
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
alphaPtr <- Complex Float -> FortranIO () (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
alpha
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
xPtr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
x
      Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr (Complex Float)
betaPtr <- Complex Float -> FortranIO () (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
beta
      Ptr (Complex Float)
yPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
y
      Ptr CInt
incyPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
      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 (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.spmv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
alphaPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
xPtr Ptr CInt
incxPtr Ptr (Complex Float)
betaPtr Ptr (Complex Float)
yPtr Ptr CInt
incyPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cspr.f>
spr ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Complex Float {- ^ alpha -} ->
   Array ZeroInt (Complex Float) {- ^ x -} ->
   Int {- ^ incx -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   IO ()
spr :: Char
-> Int
-> Complex Float
-> Array ZeroInt (Complex Float)
-> Int
-> IOArray ZeroInt (Complex Float)
-> IO ()
spr Char
uplo Int
n Complex Float
alpha Array ZeroInt (Complex Float)
x Int
incx IOArray ZeroInt (Complex Float)
ap = do
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
x
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   let _xSize :: Int
_xSize = Int
xDim0
   let _apSize :: Int
_apSize = Int
apDim0
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
alphaPtr <- Complex Float -> FortranIO () (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
alpha
      Ptr (Complex Float)
xPtr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
x
      Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      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 (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> IO ()
FFI.spr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
alphaPtr Ptr (Complex Float)
xPtr Ptr CInt
incxPtr Ptr (Complex Float)
apPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csprfs.f>
sprfs ::
   Char {- ^ uplo -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt (Complex Float) {- ^ afp -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
sprfs :: Char
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
sprfs Char
uplo Array ZeroInt (Complex Float)
ap Array ZeroInt (Complex Float)
afp Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
x = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let afpDim0 :: Int
afpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
afp
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x
   let n :: Int
n = Int
ipivDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"sprfs: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"sprfs: n*(n+1)`div`2 == afpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afpDim0)
   String -> Bool -> IO ()
Call.assert String
"sprfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
afpPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
afp
      Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.sprfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
afpPtr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/cspsv.f>
spsv ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Array ZeroInt CInt, Int)
spsv :: Char
-> Int
-> IOArray ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt CInt, Int)
spsv Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"spsv: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.spsv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
apPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/cspsvx.f>
spsvx ::
   Char {- ^ fact -} ->
   Char {- ^ uplo -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   IOArray ZeroInt (Complex Float) {- ^ afp -} ->
   IOArray ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldx -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)
spsvx :: Char
-> Char
-> Array ZeroInt (Complex Float)
-> IOArray ZeroInt (Complex Float)
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
spsvx Char
fact Char
uplo Array ZeroInt (Complex Float)
ap IOArray ZeroInt (Complex Float)
afp IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Float)
b Int
ldx = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let afpDim0 :: Int
afpDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
afp
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
ipivDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"spsvx: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"spsvx: n*(n+1)`div`2 == afpDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afpDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
factPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
afpPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
afp
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
rcondPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.spsvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
afpPtr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
     Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
         IO
  (Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO
  (Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array 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/csptrf.f>
sptrf ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   IO (Array ZeroInt CInt, Int)
sptrf :: Char
-> Int
-> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt CInt, Int)
sptrf Char
uplo Int
n IOArray ZeroInt (Complex Float)
ap = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"sptrf: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt -> Ptr (Complex Float) -> Ptr CInt -> Ptr CInt -> IO ()
FFI.sptrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
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/csptri.f>
sptri ::
   Char {- ^ uplo -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IO (Int)
sptri :: Char
-> IOArray ZeroInt (Complex Float) -> Array ZeroInt CInt -> IO Int
sptri Char
uplo IOArray ZeroInt (Complex Float)
ap Array ZeroInt CInt
ipiv = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
ipivDim0
   String -> Bool -> IO ()
Call.assert String
"sptri: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.sptri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/csptrs.f>
sptrs ::
   Char {- ^ uplo -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
sptrs :: Char
-> Array ZeroInt (Complex Float)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
sptrs Char
uplo Array ZeroInt (Complex Float)
ap Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
ipivDim0
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"sptrs: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sptrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
apPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/cstedc.f>
stedc ::
   Char {- ^ compz -} ->
   IOArray ZeroInt Float {- ^ d -} ->
   IOArray ZeroInt Float {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   Int {- ^ lwork -} ->
   Int {- ^ lrwork -} ->
   Int {- ^ liwork -} ->
   IO (Int)
stedc :: Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> IO Int
stedc Char
compz IOArray ZeroInt Float
d IOArray ZeroInt Float
e IOArray (ZeroInt, ZeroInt) (Complex Float)
z Int
lwork Int
lrwork Int
liwork = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let n :: Int
n = Int
dDim0
   let ldz :: Int
ldz = Int
zDim1
   String -> Bool -> IO ()
Call.assert String
"stedc: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"stedc: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
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
lrwork])
   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 Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
lrworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
liworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stedc Ptr CChar
compzPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
lrworkPtr 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/cstegr.f>
stegr ::
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   IOArray ZeroInt Float {- ^ d -} ->
   IOArray ZeroInt Float {- ^ e -} ->
   Float {- ^ vl -} ->
   Float {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Float {- ^ abstol -} ->
   Int {- ^ m -} ->
   Int {- ^ ldz -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
stegr :: Char
-> Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Float
-> Int
-> Int
-> Float
-> Int
-> Int
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
stegr Char
jobz Char
range IOArray ZeroInt Float
d IOArray ZeroInt Float
e Float
vl Float
vu Int
il Int
iu Float
abstol Int
m Int
ldz Int
lwork Int
liwork = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"stegr: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
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 Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
liwork
   ContT
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  IO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
   IO
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> IO
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
rangePtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr Float
vlPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
      Ptr Float
vuPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
      Ptr CInt
ilPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
      Ptr CInt
iuPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
      Ptr Float
abstolPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
abstol
      Ptr CInt
mPtr <- FortranIO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr CInt
isuppzPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isuppz
      Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
liworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stegr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr Float
abstolPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr CInt
isuppzPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> ContT
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array ZeroInt CInt
 -> Int
 -> (Int, Array ZeroInt Float,
     Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO
     (Int
      -> Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Int
   -> Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), 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/cstein.f>
stein ::
   Array ZeroInt Float {- ^ d -} ->
   Array ZeroInt Float {- ^ e -} ->
   Int {- ^ m -} ->
   Array ZeroInt Float {- ^ w -} ->
   Array ZeroInt CInt {- ^ iblock -} ->
   Array ZeroInt CInt {- ^ isplit -} ->
   Int {- ^ ldz -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
stein :: Array ZeroInt Float
-> Array ZeroInt Float
-> Int
-> Array ZeroInt Float
-> Array ZeroInt CInt
-> Array ZeroInt CInt
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
stein Array ZeroInt Float
d Array ZeroInt Float
e Int
m Array ZeroInt Float
w Array ZeroInt CInt
iblock Array ZeroInt CInt
isplit Int
ldz = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
e
   let wDim0 :: Int
wDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Float -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Float
w
   let iblockDim0 :: Int
iblockDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
iblock
   let isplitDim0 :: Int
isplitDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
isplit
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"stein: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"stein: n == wDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
wDim0)
   String -> Bool -> IO ()
Call.assert String
"stein: n == iblockDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
iblockDim0)
   String -> Bool -> IO ()
Call.assert String
"stein: n == isplitDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
isplitDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
m Int
ldz
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
5Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt CInt
ifail <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt,
       Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Float
dPtr <- Array ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
d
      Ptr Float
ePtr <- Array ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
e
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr Float
wPtr <- Array ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Float
w
      Ptr CInt
iblockPtr <- Array ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
iblock
      Ptr CInt
isplitPtr <- Array ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
isplit
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
ifailPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ifail
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stein Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr CInt
mPtr Ptr Float
wPtr Ptr CInt
iblockPtr Ptr CInt
isplitPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr Float
workPtr Ptr CInt
iworkPtr Ptr CInt
ifailPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt,
       Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array ZeroInt CInt
 -> Int
 -> (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt,
     Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt,
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt,
       Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt CInt
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Array ZeroInt CInt
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt,
       Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), 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) (Complex Float), Array ZeroInt CInt,
       Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), 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/cstemr.f>
stemr ::
   Char {- ^ jobz -} ->
   Char {- ^ range -} ->
   IOArray ZeroInt Float {- ^ d -} ->
   IOArray ZeroInt Float {- ^ e -} ->
   Float {- ^ vl -} ->
   Float {- ^ vu -} ->
   Int {- ^ il -} ->
   Int {- ^ iu -} ->
   Int {- ^ m -} ->
   Int {- ^ ldz -} ->
   Int {- ^ nzc -} ->
   Bool {- ^ tryrac -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Int, Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array ZeroInt CInt, Bool, Int)
stemr :: Char
-> Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> Float
-> Float
-> Int
-> Int
-> Int
-> Int
-> Int
-> Bool
-> Int
-> Int
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
stemr Char
jobz Char
range IOArray ZeroInt Float
d IOArray ZeroInt Float
e Float
vl Float
vu Int
il Int
iu Int
m Int
ldz Int
nzc Bool
tryrac Int
lwork Int
liwork = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
   let n :: Int
n = Int
dDim0
   String -> Bool -> IO ()
Call.assert String
"stemr: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   IOArray ZeroInt Float
w <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray (ZeroInt, ZeroInt) (Complex Float)
z <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
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 Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
liwork
   ContT
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
   Int)
  IO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
   Int)
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
    Int)
   IO
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
    Int)
 -> IO
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
       Int))
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobzPtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobz
      Ptr CChar
rangePtr <- Char
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
range
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Float
dPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr Float
vlPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vl
      Ptr Float
vuPtr <- Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
vu
      Ptr CInt
ilPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
il
      Ptr CInt
iuPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
iu
      Ptr CInt
mPtr <- FortranIO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
wPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
w
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr CInt
nzcPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nzc
      Ptr CInt
isuppzPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
isuppz
      Ptr Bool
tryracPtr <- Bool
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
tryrac
      Ptr Float
workPtr <- IOArray ZeroInt Float
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
liworkPtr <- Int
-> FortranIO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr CInt
infoPtr <- FortranIO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
   Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
       Int)
      IO
      ())
-> IO ()
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr Bool
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.stemr Ptr CChar
jobzPtr Ptr CChar
rangePtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr Float
vlPtr Ptr Float
vuPtr Ptr CInt
ilPtr Ptr CInt
iuPtr Ptr CInt
mPtr Ptr Float
wPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr CInt
nzcPtr Ptr CInt
isuppzPtr Ptr Bool
tryracPtr Ptr Float
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO
  (Int, Array ZeroInt Float,
   Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
   Int)
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Int, Array ZeroInt Float,
    Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
    Int)
 -> ContT
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
       Int)
      IO
      (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
       Int))
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
-> ContT
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
     IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
      Int)
forall a b. (a -> b) -> a -> b
$ (Int
 -> Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array ZeroInt CInt
 -> Bool
 -> Int
 -> (Int, Array ZeroInt Float,
     Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
     Int))
-> IO
     (Int
      -> Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Bool
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
          Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Int
   -> Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Bool
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
       Int))
-> IO Int
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Bool
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Bool
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
       Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array ZeroInt CInt
      -> Bool
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
w
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array ZeroInt CInt
   -> Bool
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
       Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array ZeroInt CInt
      -> Bool
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
          Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
         IO
  (Array ZeroInt CInt
   -> Bool
   -> Int
   -> (Int, Array ZeroInt Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
       Int))
-> IO (Array ZeroInt CInt)
-> IO
     (Bool
      -> Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
       Int))
-> IO Bool
-> IO
     (Int
      -> (Int, Array ZeroInt Float,
          Array (ZeroInt, ZeroInt) (Complex Float), 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 Float,
       Array (ZeroInt, ZeroInt) (Complex Float), Array ZeroInt CInt, Bool,
       Int))
-> IO Int
-> IO
     (Int, Array ZeroInt Float,
      Array (ZeroInt, ZeroInt) (Complex Float), 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/csteqr.f>
steqr ::
   Char {- ^ compz -} ->
   IOArray ZeroInt Float {- ^ d -} ->
   IOArray ZeroInt Float {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   IO (Int)
steqr :: Char
-> IOArray ZeroInt Float
-> IOArray ZeroInt Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
steqr Char
compz IOArray ZeroInt Float
d IOArray ZeroInt Float
e IOArray (ZeroInt, ZeroInt) (Complex Float)
z = do
   let dDim0 :: Int
dDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
d
   let eDim0 :: Int
eDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt Float -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt Float
e
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let n :: Int
n = Int
dDim0
   let ldz :: Int
ldz = Int
zDim1
   String -> Bool -> IO ()
Call.assert String
"steqr: n-1 == eDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"steqr: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt Float
work <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 ([Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum[Int
1,Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
2])
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
compzPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compz
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr Float
dPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
d
      Ptr Float
ePtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
e
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr Float
workPtr <- IOArray ZeroInt Float -> FortranIO Int (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.steqr Ptr CChar
compzPtr Ptr CInt
nPtr Ptr Float
dPtr Ptr Float
ePtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr Float
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/scsum1.f>
sum1 ::
   Array ZeroInt (Complex Float) {- ^ cx -} ->
   Int {- ^ incx -} ->
   IO Float
sum1 :: Array ZeroInt (Complex Float) -> Int -> IO Float
sum1 Array ZeroInt (Complex Float)
cx Int
incx = do
   let cxDim0 :: Int
cxDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
cx
   let n :: Int
n = Int
cxDim0
   ContT Float IO Float -> IO Float
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Float IO Float -> IO Float)
-> ContT Float IO Float -> IO Float
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
nPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
cxPtr <- Array ZeroInt (Complex Float)
-> FortranIO Float (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
cx
      Ptr CInt
incxPtr <- Int -> FortranIO Float (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      IO Float -> ContT Float IO Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> ContT Float IO Float)
-> IO Float -> ContT Float IO Float
forall a b. (a -> b) -> a -> b
$ Ptr CInt -> Ptr (Complex Float) -> Ptr CInt -> IO Float
FFI.sum1 Ptr CInt
nPtr Ptr (Complex Float)
cxPtr Ptr CInt
incxPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csycon.f>
sycon ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Float {- ^ anorm -} ->
   IO (Float, Int)
sycon :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> Float
-> IO (Float, Int)
sycon Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv Float
anorm = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"sycon: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO (Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr Float
anormPtr <- Float -> FortranIO (Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
anorm
      Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.sycon Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr Float
anormPtr Ptr Float
rcondPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csyconv.f>
syconv ::
   Char {- ^ uplo -} ->
   Char {- ^ way -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IO (Array ZeroInt (Complex Float), Int)
syconv :: Char
-> Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> IO (Array ZeroInt (Complex Float), Int)
syconv Char
uplo Char
way IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"syconv: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray ZeroInt (Complex Float)
e <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
wayPtr <- Char -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
way
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
ePtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
e
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.syconv Ptr CChar
uploPtr Ptr CChar
wayPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
ePtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
e
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/csyequb.f>
syequb ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt Float, Float, Float, Int)
syequb :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Float, Float, Int)
syequb Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array ZeroInt Float, Float, Float, Int)
  IO
  (Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Float, Float, Int)
   IO
   (Array ZeroInt Float, Float, Float, Int)
 -> IO (Array ZeroInt Float, Float, Float, Int))
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
-> IO (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr Float
scondPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
amaxPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt Float, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ())
-> IO () -> ContT (Array ZeroInt Float, Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.syequb Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
sPtr Ptr Float
scondPtr Ptr Float
amaxPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Float, Float, Int)
 -> ContT
      (Array ZeroInt Float, Float, Float, Int)
      IO
      (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float, Float, Float, Int)
-> ContT
     (Array ZeroInt Float, Float, Float, Int)
     IO
     (Array ZeroInt Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Float
 -> Float
 -> Int
 -> (Array ZeroInt Float, Float, Float, Int))
-> IO
     (Array ZeroInt Float
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Float
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt Float, Float, Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
         IO
  (Float -> Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float
-> IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scondPtr
         IO (Float -> Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Float -> IO (Int -> (Array ZeroInt Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
amaxPtr
         IO (Int -> (Array ZeroInt Float, Float, Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Float, Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csymv.f>
symv ::
   Char {- ^ uplo -} ->
   Complex Float {- ^ alpha -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ x -} ->
   Int {- ^ incx -} ->
   Complex Float {- ^ beta -} ->
   IOArray ZeroInt (Complex Float) {- ^ y -} ->
   Int {- ^ incy -} ->
   IO ()
symv :: Char
-> Complex Float
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> Int
-> Complex Float
-> IOArray ZeroInt (Complex Float)
-> Int
-> IO ()
symv Char
uplo Complex Float
alpha Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
x Int
incx Complex Float
beta IOArray ZeroInt (Complex Float)
y Int
incy = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
x
   let yDim0 :: Int
yDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
y
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let _xSize :: Int
_xSize = Int
xDim0
   let _ySize :: Int
_ySize = Int
yDim0
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
alphaPtr <- Complex Float -> FortranIO () (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
alpha
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
xPtr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
x
      Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr (Complex Float)
betaPtr <- Complex Float -> FortranIO () (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
beta
      Ptr (Complex Float)
yPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
y
      Ptr CInt
incyPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incy
      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 (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.symv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
alphaPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
xPtr Ptr CInt
incxPtr Ptr (Complex Float)
betaPtr Ptr (Complex Float)
yPtr Ptr CInt
incyPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csyr.f>
syr ::
   Char {- ^ uplo -} ->
   Complex Float {- ^ alpha -} ->
   Array ZeroInt (Complex Float) {- ^ x -} ->
   Int {- ^ incx -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO ()
syr :: Char
-> Complex Float
-> Array ZeroInt (Complex Float)
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO ()
syr Char
uplo Complex Float
alpha Array ZeroInt (Complex Float)
x Int
incx IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let xDim0 :: Int
xDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
x
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let _xSize :: Int
_xSize = Int
xDim0
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
alphaPtr <- Complex Float -> FortranIO () (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
alpha
      Ptr (Complex Float)
xPtr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
x
      Ptr CInt
incxPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
incx
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
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 CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.syr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
alphaPtr Ptr (Complex Float)
xPtr Ptr CInt
incxPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csyrfs.f>
syrfs ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
syrfs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
syrfs Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a Array (ZeroInt, ZeroInt) (Complex Float)
af Array ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
x = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
afDim0,Int
afDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
af
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldaf :: Int
ldaf = Int
afDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"syrfs: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
   String -> Bool -> IO ()
Call.assert String
"syrfs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   String -> Bool -> IO ()
Call.assert String
"syrfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
afPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
af
      Ptr CInt
ldafPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
      Ptr CInt
ipivPtr <- Array ZeroInt CInt
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.syrfs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csysv.f>
sysv ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt CInt, Int)
sysv :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt CInt, Int)
sysv Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sysv Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
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/csysvx.f>
sysvx ::
   Char {- ^ fact -} ->
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ af -} ->
   IOArray ZeroInt CInt {- ^ ipiv -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Int {- ^ ldx -} ->
   Int {- ^ lwork -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Float, Array ZeroInt Float, Array ZeroInt Float, Int)
sysvx :: Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray ZeroInt CInt
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
sysvx Char
fact Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
af IOArray ZeroInt CInt
ipiv Array (ZeroInt, ZeroInt) (Complex Float)
b Int
ldx Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
afDim0,Int
afDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
af
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt CInt -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldaf :: Int
ldaf = Int
afDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"sysvx: n == afDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
afDim0)
   String -> Bool -> IO ()
Call.assert String
"sysvx: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
x <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
nrhs Int
ldx
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
factPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
fact
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
afPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
af
      Ptr CInt
ldafPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldaf
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
rcondPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.sysvx Ptr CChar
factPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
afPtr Ptr CInt
ldafPtr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
rcondPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Float,
   Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Float,
    Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Float
 -> Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
     Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Float
      -> Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
x
         IO
  (Float
   -> Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
          Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO
  (Int
   -> (Array (ZeroInt, ZeroInt) (Complex Float), Float,
       Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Float,
      Array ZeroInt Float, Array 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/csyswapr.f>
syswapr ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ i1 -} ->
   Int {- ^ i2 -} ->
   IO ()
syswapr :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO ()
syswapr Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
i1 Int
i2 = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
i1Ptr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i1
      Ptr CInt
i2Ptr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
i2
      IO () -> ContT () IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.syswapr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
i1Ptr Ptr CInt
i2Ptr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/csytf2.f>
sytf2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt CInt, Int)
sytf2 :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt CInt, Int)
sytf2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
 -> IO (Array ZeroInt CInt, Int))
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
-> IO (Array ZeroInt CInt, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt CInt, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytf2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr CInt
infoPtr
      IO (Array ZeroInt CInt, Int)
-> ContT (Array ZeroInt CInt, Int) IO (Array ZeroInt CInt, Int)
forall (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/csytrf.f>
sytrf ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt CInt, Int)
sytrf :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt CInt, Int)
sytrf Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt CInt
ipiv <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- IOArray ZeroInt CInt
-> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
ipiv
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Array ZeroInt CInt, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt CInt, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt CInt, Int) IO ())
-> IO () -> ContT (Array ZeroInt CInt, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytrf Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/csytri.f>
sytri ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IO (Int)
sytri :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> IO Int
sytri Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"sytri: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.sytri Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/csytri2.f>
sytri2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Int {- ^ nb -} ->
   Int {- ^ lwork -} ->
   IO (Int)
sytri2 :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> Int
-> Int
-> IO Int
sytri2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv Int
nb Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"sytri2: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nbInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytri2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/csytri2x.f>
sytri2x ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   Int {- ^ nb -} ->
   IO (Int)
sytri2x :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> Int
-> IO Int
sytri2x Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv Int
nb = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"sytri2x: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
nbInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
nbInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
workPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
work
      Ptr CInt
nbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytri2x Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/csytrs.f>
sytrs ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
sytrs :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
sytrs Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"sytrs: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.sytrs Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
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/csytrs2.f>
sytrs2 ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt CInt {- ^ ipiv -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
sytrs2 :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt CInt
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
sytrs2 Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt CInt
ipiv IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let ipivDim0 :: Int
ipivDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt CInt -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt CInt
ipiv
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"sytrs2: n == ipivDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
ipivDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
ipivPtr <- Array ZeroInt CInt -> FortranIO Int (Ptr CInt)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt CInt
ipiv
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.sytrs2 Ptr CChar
uploPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
ipivPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
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/ctbcon.f>
tbcon ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IO (Float, Int)
tbcon :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IO (Float, Int)
tbcon Char
norm Char
uplo Char
diag Int
kd Array (ZeroInt, ZeroInt) (Complex Float)
ab = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
diagPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.tbcon Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr Float
rcondPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctbrfs.f>
tbrfs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
tbrfs :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
tbrfs Char
uplo Char
trans Char
diag Int
kd Array (ZeroInt, ZeroInt) (Complex Float)
ab Array (ZeroInt, ZeroInt) (Complex Float)
b Array (ZeroInt, ZeroInt) (Complex Float)
x = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
x
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"tbrfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
transPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
diagPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.tbrfs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctbtrs.f>
tbtrs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Int {- ^ kd -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ ab -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
tbtrs :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
tbtrs Char
uplo Char
trans Char
diag Int
kd Array (ZeroInt, ZeroInt) (Complex Float)
ab IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
abDim0,Int
abDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
ab
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
abDim0
   let ldab :: Int
ldab = Int
abDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
diagPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kdPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
kd
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
abPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
ab
      Ptr CInt
ldabPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldab
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tbtrs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
kdPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
abPtr Ptr CInt
ldabPtr Ptr (Complex Float)
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/ctfsm.f>
tfsm ::
   Char {- ^ transr -} ->
   Char {- ^ side -} ->
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Int {- ^ m -} ->
   Complex Float {- ^ alpha -} ->
   Array ZeroInt (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO ()
tfsm :: Char
-> Char
-> Char
-> Char
-> Char
-> Int
-> Complex Float
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO ()
tfsm Char
transr Char
side Char
uplo Char
trans Char
diag Int
m Complex Float
alpha Array ZeroInt (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"tfsm: n*(n+1)`div`2 == aDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
   ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> IO ()) -> ContT () IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transrPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      Ptr CChar
sidePtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
uploPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
transPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
diagPtr <- Char -> FortranIO () (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
mPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO () (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
alphaPtr <- Complex Float -> FortranIO () (Ptr (Complex Float))
forall r. Complex Float -> FortranIO r (Ptr (Complex Float))
Call.complexFloat Complex Float
alpha
      Ptr (Complex Float)
aPtr <- Array ZeroInt (Complex Float) -> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
a
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO () (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
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 (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.tfsm Ptr CChar
transrPtr Ptr CChar
sidePtr Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
alphaPtr Ptr (Complex Float)
aPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctftri.f>
tftri ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ a -} ->
   IO (Int)
tftri :: Char
-> Char -> Char -> Int -> IOArray ZeroInt (Complex Float) -> IO Int
tftri Char
transr Char
uplo Char
diag Int
n IOArray ZeroInt (Complex Float)
a = do
   let aDim0 :: Int
aDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
a
   String -> Bool -> IO ()
Call.assert String
"tftri: n*(n+1)`div`2 == aDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transrPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
diagPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
a
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.tftri Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr (Complex Float)
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/ctfttp.f>
tfttp ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ arf -} ->
   IO (Array ZeroInt (Complex Float), Int)
tfttp :: Char
-> Char
-> Int
-> Array ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float), Int)
tfttp Char
transr Char
uplo Int
n Array ZeroInt (Complex Float)
arf = do
   let arfDim0 :: Int
arfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
arf
   String -> Bool -> IO ()
Call.assert String
"tfttp: n*(n+1)`div`2 == arfDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
arfDim0)
   IOArray ZeroInt (Complex Float)
ap <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2)
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transrPtr <- Char -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
arfPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
arf
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.tfttp Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
arfPtr Ptr (Complex Float)
apPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
ap
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/ctfttr.f>
tfttr ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ arf -} ->
   Int {- ^ lda -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)
tfttr :: Char
-> Char
-> Int
-> Array ZeroInt (Complex Float)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
tfttr Char
transr Char
uplo Int
n Array ZeroInt (Complex Float)
arf Int
lda = do
   let arfDim0 :: Int
arfDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
arf
   String -> Bool -> IO ()
Call.assert String
"tfttr: n*(n+1)`div`2 == arfDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
arfDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
a <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
lda
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transrPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
arfPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
arf
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tfttr Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
arfPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
         IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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/ctgevc.f>
tgevc ::
   Char {- ^ side -} ->
   Char {- ^ howmny -} ->
   Array ZeroInt Bool {- ^ select -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ s -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ p -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ vl -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ vr -} ->
   IO (Int, Int)
tgevc :: Char
-> Char
-> Array ZeroInt Bool
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Int, Int)
tgevc Char
side Char
howmny Array ZeroInt Bool
select Array (ZeroInt, ZeroInt) (Complex Float)
s Array (ZeroInt, ZeroInt) (Complex Float)
p IOArray (ZeroInt, ZeroInt) (Complex Float)
vl IOArray (ZeroInt, ZeroInt) (Complex Float)
vr = do
   let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Bool -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Bool
select
   let (Int
sDim0,Int
sDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
s
   let (Int
pDim0,Int
pDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
p
   let (Int
vlDim0,Int
vlDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
vl
   let (Int
vrDim0,Int
vrDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
vr
   let n :: Int
n = Int
selectDim0
   let lds :: Int
lds = Int
sDim1
   let ldp :: Int
ldp = Int
pDim1
   let mm :: Int
mm = Int
vlDim0
   let ldvl :: Int
ldvl = Int
vlDim1
   let ldvr :: Int
ldvr = Int
vrDim1
   String -> Bool -> IO ()
Call.assert String
"tgevc: n == sDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
sDim0)
   String -> Bool -> IO ()
Call.assert String
"tgevc: n == pDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
pDim0)
   String -> Bool -> IO ()
Call.assert String
"tgevc: mm == vrDim0" (Int
mm Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vrDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int) IO (Int, Int) -> IO (Int, Int))
-> ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
howmnyPtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
howmny
      Ptr Bool
selectPtr <- Array ZeroInt Bool -> FortranIO (Int, Int) (Ptr Bool)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Bool
select
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
sPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
s
      Ptr CInt
ldsPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lds
      Ptr (Complex Float)
pPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
p
      Ptr CInt
ldpPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldp
      Ptr (Complex Float)
vlPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vl
      Ptr CInt
ldvlPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
      Ptr (Complex Float)
vrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vr
      Ptr CInt
ldvrPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
      Ptr CInt
mmPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mm
      Ptr CInt
mPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int) IO ())
-> IO () -> ContT (Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.tgevc Ptr CChar
sidePtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr (Complex Float)
sPtr Ptr CInt
ldsPtr Ptr (Complex Float)
pPtr Ptr CInt
ldpPtr Ptr (Complex Float)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Float)
vrPtr Ptr CInt
ldvrPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr 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/ctgex2.f>
tgex2 ::
   Bool {- ^ wantq -} ->
   Bool {- ^ wantz -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   Int {- ^ j1 -} ->
   IO (Int)
tgex2 :: Bool
-> Bool
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
tgex2 Bool
wantq Bool
wantz IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
q IOArray (ZeroInt, ZeroInt) (Complex Float)
z Int
j1 = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
q
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   let ldq :: Int
ldq = Int
qDim1
   let ldz :: Int
ldz = Int
zDim1
   String -> Bool -> IO ()
Call.assert String
"tgex2: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   String -> Bool -> IO ()
Call.assert String
"tgex2: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   String -> Bool -> IO ()
Call.assert String
"tgex2: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
wantqPtr <- Bool -> FortranIO Int (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantq
      Ptr Bool
wantzPtr <- Bool -> FortranIO Int (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr CInt
j1Ptr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
j1
      Ptr CInt
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 (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgex2 Ptr Bool
wantqPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr CInt
j1Ptr 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/ctgexc.f>
tgexc ::
   Bool {- ^ wantq -} ->
   Bool {- ^ wantz -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   Int {- ^ ifst -} ->
   Int {- ^ ilst -} ->
   IO (Int, Int)
tgexc :: Bool
-> Bool
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO (Int, Int)
tgexc Bool
wantq Bool
wantz IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
q IOArray (ZeroInt, ZeroInt) (Complex Float)
z Int
ifst Int
ilst = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
q
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   let ldq :: Int
ldq = Int
qDim1
   let ldz :: Int
ldz = Int
zDim1
   String -> Bool -> IO ()
Call.assert String
"tgexc: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   String -> Bool -> IO ()
Call.assert String
"tgexc: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   String -> Bool -> IO ()
Call.assert String
"tgexc: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int) IO (Int, Int) -> IO (Int, Int))
-> ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr Bool
wantqPtr <- Bool -> FortranIO (Int, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantq
      Ptr Bool
wantzPtr <- Bool -> FortranIO (Int, Int) (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr CInt
ifstPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ifst
      Ptr CInt
ilstPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilst
      Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int) IO ())
-> IO () -> ContT (Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgexc Ptr Bool
wantqPtr Ptr Bool
wantzPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr CInt
ifstPtr Ptr CInt
ilstPtr 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
ilstPtr)
         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/ctgsen.f>
tgsen ::
   Int {- ^ ijob -} ->
   Bool {- ^ wantq -} ->
   Bool {- ^ wantz -} ->
   Array ZeroInt Bool {- ^ select -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ z -} ->
   Int {- ^ lwork -} ->
   Int {- ^ liwork -} ->
   IO (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int, Float, Float, Array ZeroInt Float, Int)
tgsen :: Int
-> Bool
-> Bool
-> Array ZeroInt Bool
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
tgsen Int
ijob Bool
wantq Bool
wantz Array ZeroInt Bool
select IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
q IOArray (ZeroInt, ZeroInt) (Complex Float)
z Int
lwork Int
liwork = do
   let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Bool -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Bool
select
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
q
   let (Int
zDim0,Int
zDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
z
   let n :: Int
n = Int
selectDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   let ldq :: Int
ldq = Int
qDim1
   let ldz :: Int
ldz = Int
zDim1
   String -> Bool -> IO ()
Call.assert String
"tgsen: n == aDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
   String -> Bool -> IO ()
Call.assert String
"tgsen: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   String -> Bool -> IO ()
Call.assert String
"tgsen: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   String -> Bool -> IO ()
Call.assert String
"tgsen: n == zDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
zDim0)
   IOArray ZeroInt (Complex Float)
alpha <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
beta <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
dif <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
2
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float), Array ZeroInt (Complex Float), Int,
   Float, Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
   Float, Float, Array ZeroInt Float, Int)
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
    Float, Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
    Float, Float, Array ZeroInt Float, Int)
 -> IO
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
       Float, Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
ijobPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
      Ptr Bool
wantqPtr <- Bool
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantq
      Ptr Bool
wantzPtr <- Bool
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr Bool)
forall r. Bool -> FortranIO r (Ptr Bool)
Call.bool Bool
wantz
      Ptr Bool
selectPtr <- Array ZeroInt Bool
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr Bool)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Bool
select
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
alphaPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
alpha
      Ptr (Complex Float)
betaPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
beta
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr (Complex Float)
zPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
z
      Ptr CInt
ldzPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldz
      Ptr CInt
mPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
   Float, Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
plPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
   Float, Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
prPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
   Float, Float, Array ZeroInt Float, Int)
  (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
difPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dif
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
liworkPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
liwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
   Float, Float, Array ZeroInt Float, Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
       Float, Float, Array ZeroInt Float, Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr Bool
-> Ptr Bool
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgsen Ptr CInt
ijobPtr Ptr Bool
wantqPtr Ptr Bool
wantzPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
alphaPtr Ptr (Complex Float)
betaPtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr (Complex Float)
zPtr Ptr CInt
ldzPtr Ptr CInt
mPtr Ptr Float
plPtr Ptr Float
prPtr Ptr Float
difPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
liworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
   Float, Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
    Float, Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
       Float, Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
       Float, Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Int
 -> Float
 -> Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
     Int, Float, Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> Float
      -> Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int, Float, Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> Float
   -> Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int, Float, Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int
      -> Float
      -> Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int, Float, Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
alpha
         IO
  (Array ZeroInt (Complex Float)
   -> Int
   -> Float
   -> Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int, Float, Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Int
      -> Float
      -> Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int, Float, Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
beta
         IO
  (Int
   -> Float
   -> Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int, Float, Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Float
      -> Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int, Float, Float, Array 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
mPtr)
         IO
  (Float
   -> Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int, Float, Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int, Float, Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
plPtr
         IO
  (Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int, Float, Float, Array ZeroInt Float, Int))
-> IO Float
-> IO
     (Array ZeroInt Float
      -> Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int, Float, Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
prPtr
         IO
  (Array ZeroInt Float
   -> Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int, Float, Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Int, Float, Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
dif
         IO
  (Int
   -> (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Int, Float, Float, Array ZeroInt Float, Int))
-> IO Int
-> IO
     (Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int,
      Float, Float, Array 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/ctgsja.f>
tgsja ::
   Char {- ^ jobu -} ->
   Char {- ^ jobv -} ->
   Char {- ^ jobq -} ->
   Int {- ^ k -} ->
   Int {- ^ l -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Float {- ^ tola -} ->
   Float {- ^ tolb -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ u -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ v -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
tgsja :: Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> Float
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
tgsja Char
jobu Char
jobv Char
jobq Int
k Int
l IOArray (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b Float
tola Float
tolb IOArray (ZeroInt, ZeroInt) (Complex Float)
u IOArray (ZeroInt, ZeroInt) (Complex Float)
v IOArray (ZeroInt, ZeroInt) (Complex Float)
q = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
uDim0,Int
uDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
u
   let (Int
vDim0,Int
vDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
v
   let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
q
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   let m :: Int
m = Int
uDim0
   let ldu :: Int
ldu = Int
uDim1
   let p :: Int
p = Int
vDim0
   let ldv :: Int
ldv = Int
vDim1
   let ldq :: Int
ldq = Int
qDim1
   String -> Bool -> IO ()
Call.assert String
"tgsja: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   String -> Bool -> IO ()
Call.assert String
"tgsja: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   IOArray ZeroInt Float
alpha <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt Float
beta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobuPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu
      Ptr CChar
jobvPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv
      Ptr CChar
jobqPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobq
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
pPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr CInt
lPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
l
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr Float
tolaPtr <- Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tola
      Ptr Float
tolbPtr <- Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
tolb
      Ptr Float
alphaPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
alpha
      Ptr Float
betaPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
beta
      Ptr (Complex Float)
uPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
u
      Ptr CInt
lduPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu
      Ptr (Complex Float)
vPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
v
      Ptr CInt
ldvPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
ncyclePtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgsja Ptr CChar
jobuPtr Ptr CChar
jobvPtr Ptr CChar
jobqPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
lPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr Float
tolaPtr Ptr Float
tolbPtr Ptr Float
alphaPtr Ptr Float
betaPtr Ptr (Complex Float)
uPtr Ptr CInt
lduPtr Ptr (Complex Float)
vPtr Ptr CInt
ldvPtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr (Complex Float)
workPtr Ptr CInt
ncyclePtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
alpha
         IO
  (Array ZeroInt Float
   -> Int
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
beta
         IO
  (Int
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO Int
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
ncyclePtr)
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgsna.f>
tgsna ::
   Char {- ^ job -} ->
   Char {- ^ howmny -} ->
   Array ZeroInt Bool {- ^ select -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ vl -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ vr -} ->
   Int {- ^ mm -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
tgsna :: Char
-> Char
-> Array ZeroInt Bool
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
tgsna Char
job Char
howmny Array ZeroInt Bool
select Array (ZeroInt, ZeroInt) (Complex Float)
a Array (ZeroInt, ZeroInt) (Complex Float)
b Array (ZeroInt, ZeroInt) (Complex Float)
vl Array (ZeroInt, ZeroInt) (Complex Float)
vr Int
mm Int
lwork = do
   let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Bool -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Bool
select
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
vlDim0,Int
vlDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
vl
   let (Int
vrDim0,Int
vrDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
vr
   let n :: Int
n = Int
selectDim0
   let lda :: Int
lda = Int
aDim1
   let ldb :: Int
ldb = Int
bDim1
   let m :: Int
m = Int
vlDim0
   let ldvl :: Int
ldvl = Int
vlDim1
   let ldvr :: Int
ldvr = Int
vrDim1
   String -> Bool -> IO ()
Call.assert String
"tgsna: n == aDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
aDim0)
   String -> Bool -> IO ()
Call.assert String
"tgsna: n == bDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
bDim0)
   String -> Bool -> IO ()
Call.assert String
"tgsna: m == vrDim0" (Int
m Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vrDim0)
   IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
   IOArray ZeroInt Float
dif <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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
2)
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
      Ptr CChar
howmnyPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
howmny
      Ptr Bool
selectPtr <- Array ZeroInt Bool
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Bool)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Bool
select
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
vlPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
vl
      Ptr CInt
ldvlPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
      Ptr (Complex Float)
vrPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
vr
      Ptr CInt
ldvrPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr Float
difPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
dif
      Ptr CInt
mmPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mm
      Ptr CInt
mPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgsna Ptr CChar
jobPtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Float)
vrPtr Ptr CInt
ldvrPtr Ptr Float
sPtr Ptr Float
difPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
         IO
  (Array ZeroInt Float
   -> Int
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
dif
         IO
  (Int
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO Int
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctgsy2.f>
tgsy2 ::
   Char {- ^ trans -} ->
   Int {- ^ ijob -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ d -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ f -} ->
   Float {- ^ rdsum -} ->
   Float {- ^ rdscal -} ->
   IO (Float, Float, Float, Int)
tgsy2 :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Float
-> Float
-> IO (Float, Float, Float, Int)
tgsy2 Char
trans Int
ijob Array (ZeroInt, ZeroInt) (Complex Float)
a Array (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
c Array (ZeroInt, ZeroInt) (Complex Float)
d Array (ZeroInt, ZeroInt) (Complex Float)
e IOArray (ZeroInt, ZeroInt) (Complex Float)
f Float
rdsum Float
rdscal = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let (Int
dDim0,Int
dDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
d
   let (Int
eDim0,Int
eDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
e
   let (Int
fDim0,Int
fDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
f
   let m :: Int
m = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let n :: Int
n = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldc :: Int
ldc = Int
cDim1
   let ldd :: Int
ldd = Int
dDim1
   let lde :: Int
lde = Int
eDim1
   let ldf :: Int
ldf = Int
fDim1
   String -> Bool -> IO ()
Call.assert String
"tgsy2: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
   String -> Bool -> IO ()
Call.assert String
"tgsy2: m == dDim0" (Int
m Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
   String -> Bool -> IO ()
Call.assert String
"tgsy2: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"tgsy2: n == fDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
fDim0)
   ContT (Float, Float, Float, Int) IO (Float, Float, Float, Int)
-> IO (Float, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float, Float, Int) IO (Float, Float, Float, Int)
 -> IO (Float, Float, Float, Int))
-> ContT (Float, Float, Float, Int) IO (Float, Float, Float, Int)
-> IO (Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transPtr <- Char -> FortranIO (Float, Float, Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
ijobPtr <- Int -> FortranIO (Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
      Ptr CInt
mPtr <- Int -> FortranIO (Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO (Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
dPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
d
      Ptr CInt
lddPtr <- Int -> FortranIO (Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldd
      Ptr (Complex Float)
ePtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
e
      Ptr CInt
ldePtr <- Int -> FortranIO (Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lde
      Ptr (Complex Float)
fPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
f
      Ptr CInt
ldfPtr <- Int -> FortranIO (Float, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldf
      Ptr Float
scalePtr <- FortranIO (Float, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
rdsumPtr <- Float -> FortranIO (Float, Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rdsum
      Ptr Float
rdscalPtr <- Float -> FortranIO (Float, Float, Float, Int) (Ptr Float)
forall r. Float -> FortranIO r (Ptr Float)
Call.float Float
rdscal
      Ptr CInt
infoPtr <- FortranIO (Float, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Float, Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Float, Int) IO ())
-> IO () -> ContT (Float, Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.tgsy2 Ptr CChar
transPtr Ptr CInt
ijobPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
dPtr Ptr CInt
lddPtr Ptr (Complex Float)
ePtr Ptr CInt
ldePtr Ptr (Complex Float)
fPtr Ptr CInt
ldfPtr Ptr Float
scalePtr Ptr Float
rdsumPtr Ptr Float
rdscalPtr Ptr CInt
infoPtr
      IO (Float, Float, Float, Int)
-> ContT (Float, Float, Float, Int) IO (Float, Float, Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Float, Int)
 -> ContT (Float, Float, Float, Int) IO (Float, Float, Float, Int))
-> IO (Float, Float, Float, Int)
-> ContT (Float, Float, Float, Int) IO (Float, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> Float -> Int -> (Float, Float, Float, Int))
-> IO
     (Float -> Float -> Float -> Int -> (Float, Float, Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO (Float -> Float -> Float -> Int -> (Float, Float, Float, Int))
-> IO Float
-> IO (Float -> Float -> Int -> (Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
         IO (Float -> Float -> Int -> (Float, Float, Float, Int))
-> IO Float -> IO (Float -> Int -> (Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rdsumPtr
         IO (Float -> Int -> (Float, Float, Float, Int))
-> IO Float -> IO (Int -> (Float, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rdscalPtr
         IO (Int -> (Float, Float, Float, Int))
-> IO Int -> IO (Float, Float, 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/ctgsyl.f>
tgsyl ::
   Char {- ^ trans -} ->
   Int {- ^ ijob -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ d -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ e -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ f -} ->
   Int {- ^ lwork -} ->
   IO (Float, Float, Int)
tgsyl :: Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Float, Float, Int)
tgsyl Char
trans Int
ijob Array (ZeroInt, ZeroInt) (Complex Float)
a Array (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
c Array (ZeroInt, ZeroInt) (Complex Float)
d Array (ZeroInt, ZeroInt) (Complex Float)
e IOArray (ZeroInt, ZeroInt) (Complex Float)
f Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let (Int
dDim0,Int
dDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
d
   let (Int
eDim0,Int
eDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
e
   let (Int
fDim0,Int
fDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
f
   let m :: Int
m = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let n :: Int
n = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldc :: Int
ldc = Int
cDim1
   let ldd :: Int
ldd = Int
dDim1
   let lde :: Int
lde = Int
eDim1
   let ldf :: Int
ldf = Int
fDim1
   String -> Bool -> IO ()
Call.assert String
"tgsyl: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
   String -> Bool -> IO ()
Call.assert String
"tgsyl: m == dDim0" (Int
m Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
dDim0)
   String -> Bool -> IO ()
Call.assert String
"tgsyl: n == eDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
eDim0)
   String -> Bool -> IO ()
Call.assert String
"tgsyl: n == fDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
fDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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
2)
   ContT (Float, Float, Int) IO (Float, Float, Int)
-> IO (Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Float, Int) IO (Float, Float, Int)
 -> IO (Float, Float, Int))
-> ContT (Float, Float, Int) IO (Float, Float, Int)
-> IO (Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transPtr <- Char -> FortranIO (Float, Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
ijobPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ijob
      Ptr CInt
mPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
dPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
d
      Ptr CInt
lddPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldd
      Ptr (Complex Float)
ePtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
e
      Ptr CInt
ldePtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lde
      Ptr (Complex Float)
fPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
f
      Ptr CInt
ldfPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldf
      Ptr Float
scalePtr <- FortranIO (Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
difPtr <- FortranIO (Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt -> FortranIO (Float, Float, Int) (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO (Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Float, Int) IO ())
-> IO () -> ContT (Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tgsyl Ptr CChar
transPtr Ptr CInt
ijobPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
dPtr Ptr CInt
lddPtr Ptr (Complex Float)
ePtr Ptr CInt
ldePtr Ptr (Complex Float)
fPtr Ptr CInt
ldfPtr Ptr Float
scalePtr Ptr Float
difPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO (Float, Float, Int)
-> ContT (Float, Float, Int) IO (Float, Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Float, Int)
 -> ContT (Float, Float, Int) IO (Float, Float, Int))
-> IO (Float, Float, Int)
-> ContT (Float, Float, Int) IO (Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Float -> Int -> (Float, Float, Int))
-> IO (Float -> Float -> Int -> (Float, Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO (Float -> Float -> Int -> (Float, Float, Int))
-> IO Float -> IO (Float -> Int -> (Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
         IO (Float -> Int -> (Float, Float, Int))
-> IO Float -> IO (Int -> (Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
difPtr
         IO (Int -> (Float, Float, Int)) -> IO Int -> IO (Float, Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctpcon.f>
tpcon ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   IO (Float, Int)
tpcon :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt (Complex Float)
-> IO (Float, Int)
tpcon Char
norm Char
uplo Char
diag Int
n Array ZeroInt (Complex Float)
ap = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"tpcon: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
diagPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.tpcon Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr Float
rcondPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctprfs.f>
tprfs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
tprfs :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
tprfs Char
uplo Char
trans Char
diag Int
n Array ZeroInt (Complex Float)
ap Array (ZeroInt, ZeroInt) (Complex Float)
b Array (ZeroInt, ZeroInt) (Complex Float)
x = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
x
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"tprfs: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"tprfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
transPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
diagPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.tprfs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctptri.f>
tptri ::
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Int {- ^ n -} ->
   IOArray ZeroInt (Complex Float) {- ^ ap -} ->
   IO (Int)
tptri :: Char -> Char -> Int -> IOArray ZeroInt (Complex Float) -> IO Int
tptri Char
uplo Char
diag Int
n IOArray ZeroInt (Complex Float)
ap = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ IOArray ZeroInt (Complex Float) -> ZeroInt
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"tptri: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
diagPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.tptri Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr (Complex Float)
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/ctptrs.f>
tptrs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
tptrs :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
tptrs Char
uplo Char
trans Char
diag Int
n Array ZeroInt (Complex Float)
ap IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   String -> Bool -> IO ()
Call.assert String
"tptrs: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
diagPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tptrs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
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/ctpttf.f>
tpttf ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   IO (Array ZeroInt (Complex Float), Int)
tpttf :: Char
-> Char
-> Int
-> Array ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float), Int)
tpttf Char
transr Char
uplo Int
n Array ZeroInt (Complex Float)
ap = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"tpttf: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray ZeroInt (Complex Float)
arf <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2)
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transrPtr <- Char -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
arfPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
arf
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.tpttf Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
arfPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
arf
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/ctpttr.f>
tpttr ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Int {- ^ lda -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)
tpttr :: Char
-> Int
-> Array ZeroInt (Complex Float)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
tpttr Char
uplo Int
n Array ZeroInt (Complex Float)
ap Int
lda = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   String -> Bool -> IO ()
Call.assert String
"tpttr: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
a <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
lda
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tpttr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
         IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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/ctrcon.f>
trcon ::
   Char {- ^ norm -} ->
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Float, Int)
trcon :: Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IO (Float, Int)
trcon Char
norm Char
uplo Char
diag Array (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
normPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
norm
      Ptr CChar
uploPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
diagPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr Float
rcondPtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO (Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.trcon Ptr CChar
normPtr Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr Float
rcondPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
rcondPtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrevc.f>
trevc ::
   Char {- ^ side -} ->
   Char {- ^ howmny -} ->
   Array ZeroInt Bool {- ^ select -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ t -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ vl -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ vr -} ->
   IO (Int, Int)
trevc :: Char
-> Char
-> Array ZeroInt Bool
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Int, Int)
trevc Char
side Char
howmny Array ZeroInt Bool
select IOArray (ZeroInt, ZeroInt) (Complex Float)
t IOArray (ZeroInt, ZeroInt) (Complex Float)
vl IOArray (ZeroInt, ZeroInt) (Complex Float)
vr = do
   let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Bool -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Bool
select
   let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
t
   let (Int
vlDim0,Int
vlDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
vl
   let (Int
vrDim0,Int
vrDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
vr
   let n :: Int
n = Int
selectDim0
   let ldt :: Int
ldt = Int
tDim1
   let mm :: Int
mm = Int
vlDim0
   let ldvl :: Int
ldvl = Int
vlDim1
   let ldvr :: Int
ldvr = Int
vrDim1
   String -> Bool -> IO ()
Call.assert String
"trevc: n == tDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tDim0)
   String -> Bool -> IO ()
Call.assert String
"trevc: mm == vrDim0" (Int
mm Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vrDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Int, Int) IO (Int, Int) -> IO (Int, Int))
-> ContT (Int, Int) IO (Int, Int) -> IO (Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
howmnyPtr <- Char -> FortranIO (Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
howmny
      Ptr Bool
selectPtr <- Array ZeroInt Bool -> FortranIO (Int, Int) (Ptr Bool)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Bool
select
      Ptr CInt
nPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
t
      Ptr CInt
ldtPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr (Complex Float)
vlPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vl
      Ptr CInt
ldvlPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
      Ptr (Complex Float)
vrPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
vr
      Ptr CInt
ldvrPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
      Ptr CInt
mmPtr <- Int -> FortranIO (Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mm
      Ptr CInt
mPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO (Int, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float -> FortranIO (Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO (Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Int, Int) IO ())
-> IO () -> ContT (Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.trevc Ptr CChar
sidePtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr (Complex Float)
tPtr Ptr CInt
ldtPtr Ptr (Complex Float)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Float)
vrPtr Ptr CInt
ldvrPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr 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/ctrexc.f>
trexc ::
   Char {- ^ compq -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ t -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->
   Int {- ^ ifst -} ->
   Int {- ^ ilst -} ->
   IO (Int)
trexc :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO Int
trexc Char
compq IOArray (ZeroInt, ZeroInt) (Complex Float)
t IOArray (ZeroInt, ZeroInt) (Complex Float)
q Int
ifst Int
ilst = do
   let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
t
   let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
q
   let n :: Int
n = Int
tDim0
   let ldt :: Int
ldt = Int
tDim1
   let ldq :: Int
ldq = Int
qDim1
   String -> Bool -> IO ()
Call.assert String
"trexc: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
compqPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compq
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
t
      Ptr CInt
ldtPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr CInt
ifstPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ifst
      Ptr CInt
ilstPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ilst
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trexc Ptr CChar
compqPtr Ptr CInt
nPtr Ptr (Complex Float)
tPtr Ptr CInt
ldtPtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr CInt
ifstPtr Ptr CInt
ilstPtr 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/ctrrfs.f>
trrfs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ x -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int)
trrfs :: Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
trrfs Char
uplo Char
trans Char
diag Array (ZeroInt, ZeroInt) (Complex Float)
a Array (ZeroInt, ZeroInt) (Complex Float)
b Array (ZeroInt, ZeroInt) (Complex Float)
x = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
xDim0,Int
xDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
x
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldx :: Int
ldx = Int
xDim1
   String -> Bool -> IO ()
Call.assert String
"trrfs: nrhs == xDim0" (Int
nrhs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
xDim0)
   IOArray ZeroInt Float
ferr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt Float
berr <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
nrhs
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
2Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
n)
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
transPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
diagPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
xPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
x
      Ptr CInt
ldxPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx
      Ptr Float
ferrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
ferr
      Ptr Float
berrPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
berr
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.trrfs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
xPtr Ptr CInt
ldxPtr Ptr Float
ferrPtr Ptr Float
berrPtr Ptr (Complex Float)
workPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
ferr
         IO
  (Array ZeroInt Float
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO (Array ZeroInt Float)
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
berr
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int))
-> IO Int -> IO (Array ZeroInt Float, Array ZeroInt Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrsen.f>
trsen ::
   Char {- ^ job -} ->
   Char {- ^ compq -} ->
   Array ZeroInt Bool {- ^ select -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ t -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ q -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Int, Float, Float, Int)
trsen :: Char
-> Char
-> Array ZeroInt Bool
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt (Complex Float), Int, Float, Float, Int)
trsen Char
job Char
compq Array ZeroInt Bool
select IOArray (ZeroInt, ZeroInt) (Complex Float)
t IOArray (ZeroInt, ZeroInt) (Complex Float)
q Int
lwork = do
   let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Bool -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Bool
select
   let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
t
   let (Int
qDim0,Int
qDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
q
   let n :: Int
n = Int
selectDim0
   let ldt :: Int
ldt = Int
tDim1
   let ldq :: Int
ldq = Int
qDim1
   String -> Bool -> IO ()
Call.assert String
"trsen: n == tDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tDim0)
   String -> Bool -> IO ()
Call.assert String
"trsen: n == qDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
qDim0)
   IOArray ZeroInt (Complex Float)
w <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float), Int, Float, Float, Int)
  IO
  (Array ZeroInt (Complex Float), Int, Float, Float, Int)
-> IO (Array ZeroInt (Complex Float), Int, Float, Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int, Float, Float, Int)
   IO
   (Array ZeroInt (Complex Float), Int, Float, Float, Int)
 -> IO (Array ZeroInt (Complex Float), Int, Float, Float, Int))
-> ContT
     (Array ZeroInt (Complex Float), Int, Float, Float, Int)
     IO
     (Array ZeroInt (Complex Float), Int, Float, Float, Int)
-> IO (Array ZeroInt (Complex Float), Int, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float), Int, Float, Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
      Ptr CChar
compqPtr <- Char
-> FortranIO
     (Array ZeroInt (Complex Float), Int, Float, Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
compq
      Ptr Bool
selectPtr <- Array ZeroInt Bool
-> FortranIO
     (Array ZeroInt (Complex Float), Int, Float, Float, Int) (Ptr Bool)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Bool
select
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Int, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int, Float, Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
t
      Ptr CInt
ldtPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Int, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int, Float, Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Int, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr (Complex Float)
wPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int, Float, Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
w
      Ptr CInt
mPtr <- FortranIO
  (Array ZeroInt (Complex Float), Int, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
sPtr <- FortranIO
  (Array ZeroInt (Complex Float), Int, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr Float
sepPtr <- FortranIO
  (Array ZeroInt (Complex Float), Int, Float, Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int, Float, Float, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt (Complex Float), Int, Float, Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt (Complex Float), Int, Float, Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt (Complex Float), Int, Float, Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt (Complex Float), Int, Float, Float, Int) IO ())
-> IO ()
-> ContT
     (Array ZeroInt (Complex Float), Int, Float, Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trsen Ptr CChar
jobPtr Ptr CChar
compqPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr (Complex Float)
tPtr Ptr CInt
ldtPtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr (Complex Float)
wPtr Ptr CInt
mPtr Ptr Float
sPtr Ptr Float
sepPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int, Float, Float, Int)
-> ContT
     (Array ZeroInt (Complex Float), Int, Float, Float, Int)
     IO
     (Array ZeroInt (Complex Float), Int, Float, Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int, Float, Float, Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int, Float, Float, Int)
      IO
      (Array ZeroInt (Complex Float), Int, Float, Float, Int))
-> IO (Array ZeroInt (Complex Float), Int, Float, Float, Int)
-> ContT
     (Array ZeroInt (Complex Float), Int, Float, Float, Int)
     IO
     (Array ZeroInt (Complex Float), Int, Float, Float, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int
 -> Float
 -> Float
 -> Int
 -> (Array ZeroInt (Complex Float), Int, Float, Float, Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt (Complex Float), Int, Float, Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt (Complex Float), Int, Float, Float, Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Int
      -> Float
      -> Float
      -> Int
      -> (Array ZeroInt (Complex Float), Int, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
w
         IO
  (Int
   -> Float
   -> Float
   -> Int
   -> (Array ZeroInt (Complex Float), Int, Float, Float, Int))
-> IO Int
-> IO
     (Float
      -> Float
      -> Int
      -> (Array ZeroInt (Complex Float), Int, Float, 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
mPtr)
         IO
  (Float
   -> Float
   -> Int
   -> (Array ZeroInt (Complex Float), Int, Float, Float, Int))
-> IO Float
-> IO
     (Float
      -> Int -> (Array ZeroInt (Complex Float), Int, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
sPtr
         IO
  (Float
   -> Int -> (Array ZeroInt (Complex Float), Int, Float, Float, Int))
-> IO Float
-> IO
     (Int -> (Array ZeroInt (Complex Float), Int, Float, Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
sepPtr
         IO (Int -> (Array ZeroInt (Complex Float), Int, Float, Float, Int))
-> IO Int
-> IO (Array ZeroInt (Complex Float), Int, Float, 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/ctrsna.f>
trsna ::
   Char {- ^ job -} ->
   Char {- ^ howmny -} ->
   Array ZeroInt Bool {- ^ select -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ t -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ vl -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ vr -} ->
   Int {- ^ mm -} ->
   Int {- ^ ldwork -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
trsna :: Char
-> Char
-> Array ZeroInt Bool
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
trsna Char
job Char
howmny Array ZeroInt Bool
select Array (ZeroInt, ZeroInt) (Complex Float)
t Array (ZeroInt, ZeroInt) (Complex Float)
vl Array (ZeroInt, ZeroInt) (Complex Float)
vr Int
mm Int
ldwork = do
   let selectDim0 :: Int
selectDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt Bool -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt Bool
select
   let (Int
tDim0,Int
tDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
t
   let (Int
vlDim0,Int
vlDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
vl
   let (Int
vrDim0,Int
vrDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
vr
   let n :: Int
n = Int
selectDim0
   let ldt :: Int
ldt = Int
tDim1
   let m :: Int
m = Int
vlDim0
   let ldvl :: Int
ldvl = Int
vlDim1
   let ldvr :: Int
ldvr = Int
vrDim1
   String -> Bool -> IO ()
Call.assert String
"trsna: n == tDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tDim0)
   String -> Bool -> IO ()
Call.assert String
"trsna: m == vrDim0" (Int
m Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
vrDim0)
   IOArray ZeroInt Float
s <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
   IOArray ZeroInt Float
sep <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
mm
   IOArray (ZeroInt, ZeroInt) (Complex Float)
work <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) Int
ldwork
   IOArray ZeroInt Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT
  (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
 -> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
job
      Ptr CChar
howmnyPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
howmny
      Ptr Bool
selectPtr <- Array ZeroInt Bool
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Bool)
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt Bool
select
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
tPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
t
      Ptr CInt
ldtPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldt
      Ptr (Complex Float)
vlPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
vl
      Ptr CInt
ldvlPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvl
      Ptr (Complex Float)
vrPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
vr
      Ptr CInt
ldvrPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldvr
      Ptr Float
sPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
s
      Ptr Float
sepPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
sep
      Ptr CInt
mmPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
mm
      Ptr CInt
mPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr (Complex Float)
workPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
work
      Ptr CInt
ldworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float, Int, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ())
-> IO ()
-> ContT (Array ZeroInt Float, Array ZeroInt Float, Int, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr Bool
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.trsna Ptr CChar
jobPtr Ptr CChar
howmnyPtr Ptr Bool
selectPtr Ptr CInt
nPtr Ptr (Complex Float)
tPtr Ptr CInt
ldtPtr Ptr (Complex Float)
vlPtr Ptr CInt
ldvlPtr Ptr (Complex Float)
vrPtr Ptr CInt
ldvrPtr Ptr Float
sPtr Ptr Float
sepPtr Ptr CInt
mmPtr Ptr CInt
mPtr Ptr (Complex Float)
workPtr Ptr CInt
ldworkPtr Ptr Float
rworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Int
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Int
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Int
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Int
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
s
         IO
  (Array ZeroInt Float
   -> Int
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO (Array ZeroInt Float)
-> IO
     (Int
      -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
sep
         IO
  (Int
   -> Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO Int
-> IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
mPtr)
         IO (Int -> (Array ZeroInt Float, Array ZeroInt Float, Int, Int))
-> IO Int
-> IO (Array ZeroInt Float, Array ZeroInt Float, Int, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrsyl.f>
trsyl ::
   Char {- ^ trana -} ->
   Char {- ^ tranb -} ->
   Int {- ^ isgn -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   IO (Float, Int)
trsyl :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Float, Int)
trsyl Char
trana Char
tranb Int
isgn Array (ZeroInt, ZeroInt) (Complex Float)
a Array (ZeroInt, ZeroInt) (Complex Float)
b IOArray (ZeroInt, ZeroInt) (Complex Float)
c = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
b
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let m :: Int
m = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let n :: Int
n = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   let ldc :: Int
ldc = Int
cDim1
   String -> Bool -> IO ()
Call.assert String
"trsyl: n == cDim0" (Int
n Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
cDim0)
   ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (Float, Int) IO (Float, Int) -> IO (Float, Int))
-> ContT (Float, Int) IO (Float, Int) -> IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
tranaPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trana
      Ptr CChar
tranbPtr <- Char -> FortranIO (Float, Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
tranb
      Ptr CInt
isgnPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
isgn
      Ptr CInt
mPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO (Float, Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO (Float, Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr Float
scalePtr <- FortranIO (Float, Int) (Ptr Float)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      Ptr CInt
infoPtr <- FortranIO (Float, Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Float, Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Float, Int) IO ())
-> IO () -> ContT (Float, Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> IO ()
FFI.trsyl Ptr CChar
tranaPtr Ptr CChar
tranbPtr Ptr CInt
isgnPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
bPtr Ptr CInt
ldbPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr Float
scalePtr Ptr CInt
infoPtr
      IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Float, Int) -> ContT (Float, Int) IO (Float, Int))
-> IO (Float, Int) -> ContT (Float, Int) IO (Float, Int)
forall a b. (a -> b) -> a -> b
$ (Float -> Int -> (Float, Int)) -> IO (Float -> Int -> (Float, Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO (Float -> Int -> (Float, Int))
-> IO Float -> IO (Int -> (Float, Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Float -> IO Float
forall a. Storable a => Ptr a -> IO a
peek Ptr Float
scalePtr
         IO (Int -> (Float, Int)) -> IO Int -> IO (Float, Int)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
infoPtr)

-- | <http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/ctrti2.f>
trti2 ::
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Int)
trti2 :: Char
-> Char -> IOArray (ZeroInt, ZeroInt) (Complex Float) -> IO Int
trti2 Char
uplo Char
diag IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
diagPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trti2 Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr (Complex Float)
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/ctrtri.f>
trtri ::
   Char {- ^ uplo -} ->
   Char {- ^ diag -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Int)
trtri :: Char
-> Char -> IOArray (ZeroInt, ZeroInt) (Complex Float) -> IO Int
trtri Char
uplo Char
diag IOArray (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
diagPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trtri Ptr CChar
uploPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr (Complex Float)
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/ctrtrs.f>
trtrs ::
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Char {- ^ diag -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ b -} ->
   IO (Int)
trtrs :: Char
-> Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO Int
trtrs Char
uplo Char
trans Char
diag Array (ZeroInt, ZeroInt) (Complex Float)
a IOArray (ZeroInt, ZeroInt) (Complex Float)
b = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let (Int
bDim0,Int
bDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
b
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let nrhs :: Int
nrhs = Int
bDim0
   let ldb :: Int
ldb = Int
bDim1
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
diagPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
diag
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
nrhsPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
nrhs
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
bPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
b
      Ptr CInt
ldbPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldb
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.trtrs Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CChar
diagPtr Ptr CInt
nPtr Ptr CInt
nrhsPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
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/ctrttf.f>
trttf ::
   Char {- ^ transr -} ->
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt (Complex Float), Int)
trttf :: Char
-> Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt (Complex Float), Int)
trttf Char
transr Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
arf <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2)
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transrPtr <- Char -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
transr
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
arfPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
arf
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.trttf Ptr CChar
transrPtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
arfPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
arf
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/ctrttp.f>
trttp ::
   Char {- ^ uplo -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   IO (Array ZeroInt (Complex Float), Int)
trttp :: Char
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array ZeroInt (Complex Float), Int)
trttp Char
uplo Array (ZeroInt, ZeroInt) (Complex Float)
a = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
ap <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2)
   ContT
  (Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
apPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
ap
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.trttp Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
apPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
ap
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/ctzrzf.f>
tzrzf ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt (Complex Float), Int)
tzrzf :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO (Array ZeroInt (Complex Float), Int)
tzrzf Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   IOArray ZeroInt (Complex Float)
tau <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float), Int)
  IO
  (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt (Complex Float), Int)
 -> IO (Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
-> IO (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt (Complex Float), Int) (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO (Array ZeroInt (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ())
-> IO () -> ContT (Array ZeroInt (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.tzrzf Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt (Complex Float)
 -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array ZeroInt (Complex Float)
   -> Int -> (Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO (Int -> (Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tau
         IO (Int -> (Array ZeroInt (Complex Float), Int))
-> IO Int -> IO (Array ZeroInt (Complex 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/cunbdb.f>
unbdb ::
   Char {- ^ trans -} ->
   Char {- ^ signs -} ->
   Int {- ^ m -} ->
   Int {- ^ p -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x11 -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x12 -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x21 -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x22 -} ->
   Int {- ^ lwork -} ->
   IO (Array ZeroInt Float, Array ZeroInt Float, Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
unbdb :: Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
unbdb Char
trans Char
signs Int
m Int
p IOArray (ZeroInt, ZeroInt) (Complex Float)
x11 IOArray (ZeroInt, ZeroInt) (Complex Float)
x12 IOArray (ZeroInt, ZeroInt) (Complex Float)
x21 IOArray (ZeroInt, ZeroInt) (Complex Float)
x22 Int
lwork = do
   let (Int
x11Dim0,Int
x11Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x11
   let (Int
x12Dim0,Int
x12Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x12
   let (Int
x21Dim0,Int
x21Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x21
   let (Int
x22Dim0,Int
x22Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x22
   let q :: Int
q = Int
x11Dim0
   let ldx11 :: Int
ldx11 = Int
x11Dim1
   let ldx12 :: Int
ldx12 = Int
x12Dim1
   let ldx21 :: Int
ldx21 = Int
x21Dim1
   let ldx22 :: Int
ldx22 = Int
x22Dim1
   String -> Bool -> IO ()
Call.assert String
"unbdb: m-q == x12Dim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x12Dim0)
   String -> Bool -> IO ()
Call.assert String
"unbdb: q == x21Dim0" (Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x21Dim0)
   String -> Bool -> IO ()
Call.assert String
"unbdb: m-q == x22Dim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x22Dim0)
   IOArray ZeroInt Float
theta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
   IOArray ZeroInt Float
phi <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
qInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   IOArray ZeroInt (Complex Float)
taup1 <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
p
   IOArray ZeroInt (Complex Float)
taup2 <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
p)
   IOArray ZeroInt (Complex Float)
tauq1 <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
q
   IOArray ZeroInt (Complex Float)
tauq2 <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
lwork
   ContT
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
  IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
   IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
 -> IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
transPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
signsPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
signs
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
pPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
      Ptr CInt
qPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
q
      Ptr (Complex Float)
x11Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x11
      Ptr CInt
ldx11Ptr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx11
      Ptr (Complex Float)
x12Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x12
      Ptr CInt
ldx12Ptr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx12
      Ptr (Complex Float)
x21Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x21
      Ptr CInt
ldx21Ptr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx21
      Ptr (Complex Float)
x22Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x22
      Ptr CInt
ldx22Ptr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx22
      Ptr Float
thetaPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
theta
      Ptr Float
phiPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
phi
      Ptr (Complex Float)
taup1Ptr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
taup1
      Ptr (Complex Float)
taup2Ptr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
taup2
      Ptr (Complex Float)
tauq1Ptr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tauq1
      Ptr (Complex Float)
tauq2Ptr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
tauq2
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unbdb Ptr CChar
transPtr Ptr CChar
signsPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
qPtr Ptr (Complex Float)
x11Ptr Ptr CInt
ldx11Ptr Ptr (Complex Float)
x12Ptr Ptr CInt
ldx12Ptr Ptr (Complex Float)
x21Ptr Ptr CInt
ldx21Ptr Ptr (Complex Float)
x22Ptr Ptr CInt
ldx22Ptr Ptr Float
thetaPtr Ptr Float
phiPtr Ptr (Complex Float)
taup1Ptr Ptr (Complex Float)
taup2Ptr Ptr (Complex Float)
tauq1Ptr Ptr (Complex Float)
tauq2Ptr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array ZeroInt Float,
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
   Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array ZeroInt Float,
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
    Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
 -> ContT
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
      IO
      (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array ZeroInt Float
 -> Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Array ZeroInt (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array ZeroInt Float,
     Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
     Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,,)
         IO
  (Array ZeroInt Float
   -> Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt Float
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
theta
         IO
  (Array ZeroInt Float
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
phi
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
taup1
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
taup2
         IO
  (Array ZeroInt (Complex Float)
   -> Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Array ZeroInt (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tauq1
         IO
  (Array ZeroInt (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO (Array ZeroInt (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array ZeroInt Float,
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
          Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt (Complex Float)
-> IO (Array ZeroInt (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt (Complex Float)
tauq2
         IO
  (Int
   -> (Array ZeroInt Float, Array ZeroInt Float,
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
       Array ZeroInt (Complex Float), Array ZeroInt (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array ZeroInt Float,
      Array ZeroInt (Complex Float), Array ZeroInt (Complex Float),
      Array ZeroInt (Complex Float), Array ZeroInt (Complex 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/cuncsd.f>
uncsd ::
   Char {- ^ jobu1 -} ->
   Char {- ^ jobu2 -} ->
   Char {- ^ jobv1t -} ->
   Char {- ^ jobv2t -} ->
   Char {- ^ trans -} ->
   Char {- ^ signs -} ->
   Int {- ^ m -} ->
   Int {- ^ p -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x11 -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x12 -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x21 -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ x22 -} ->
   Int {- ^ r -} ->
   Int {- ^ ldu1 -} ->
   Int {- ^ ldu2 -} ->
   Int {- ^ ldv1t -} ->
   Int {- ^ ldv2t -} ->
   Int {- ^ lwork -} ->
   Int {- ^ rworkSize -} ->
   Int {- ^ lrwork -} ->
   IO (Array ZeroInt Float, Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Array (ZeroInt,ZeroInt) (Complex Float), Int)
uncsd :: Char
-> Char
-> Char
-> Char
-> Char
-> Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
uncsd Char
jobu1 Char
jobu2 Char
jobv1t Char
jobv2t Char
trans Char
signs Int
m Int
p IOArray (ZeroInt, ZeroInt) (Complex Float)
x11 IOArray (ZeroInt, ZeroInt) (Complex Float)
x12 IOArray (ZeroInt, ZeroInt) (Complex Float)
x21 IOArray (ZeroInt, ZeroInt) (Complex Float)
x22 Int
r Int
ldu1 Int
ldu2 Int
ldv1t Int
ldv2t Int
lwork Int
rworkSize Int
lrwork = do
   let (Int
x11Dim0,Int
x11Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x11
   let (Int
x12Dim0,Int
x12Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x12
   let (Int
x21Dim0,Int
x21Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x21
   let (Int
x22Dim0,Int
x22Dim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
x22
   let q :: Int
q = Int
x11Dim0
   let ldx11 :: Int
ldx11 = Int
x11Dim1
   let ldx12 :: Int
ldx12 = Int
x12Dim1
   let ldx21 :: Int
ldx21 = Int
x21Dim1
   let ldx22 :: Int
ldx22 = Int
x22Dim1
   String -> Bool -> IO ()
Call.assert String
"uncsd: m-q == x12Dim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x12Dim0)
   String -> Bool -> IO ()
Call.assert String
"uncsd: q == x21Dim0" (Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x21Dim0)
   String -> Bool -> IO ()
Call.assert String
"uncsd: m-q == x22Dim0" (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
x22Dim0)
   IOArray ZeroInt Float
theta <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
r
   IOArray (ZeroInt, ZeroInt) (Complex Float)
u1 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
p Int
ldu1
   IOArray (ZeroInt, ZeroInt) (Complex Float)
u2 <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
p) Int
ldu2
   IOArray (ZeroInt, ZeroInt) (Complex Float)
v1t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
q Int
ldv1t
   IOArray (ZeroInt, ZeroInt) (Complex Float)
v2t <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q) Int
ldv2t
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 Float
rwork <- Int -> IO (IOArray ZeroInt Float)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
rworkSize
   IOArray ZeroInt CInt
iwork <- Int -> IO (IOArray ZeroInt CInt)
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-[Int] -> Int
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum[Int
p,Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
p,Int
q,Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
q])
   ContT
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
jobu1Ptr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu1
      Ptr CChar
jobu2Ptr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobu2
      Ptr CChar
jobv1tPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv1t
      Ptr CChar
jobv2tPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
jobv2t
      Ptr CChar
transPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CChar
signsPtr <- Char
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
signs
      Ptr CInt
mPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
pPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
p
      Ptr CInt
qPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
q
      Ptr (Complex Float)
x11Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x11
      Ptr CInt
ldx11Ptr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx11
      Ptr (Complex Float)
x12Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x12
      Ptr CInt
ldx12Ptr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx12
      Ptr (Complex Float)
x21Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x21
      Ptr CInt
ldx21Ptr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx21
      Ptr (Complex Float)
x22Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
x22
      Ptr CInt
ldx22Ptr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldx22
      Ptr Float
thetaPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
theta
      Ptr (Complex Float)
u1Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
u1
      Ptr CInt
ldu1Ptr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu1
      Ptr (Complex Float)
u2Ptr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
u2
      Ptr CInt
ldu2Ptr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldu2
      Ptr (Complex Float)
v1tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
v1t
      Ptr CInt
ldv1tPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv1t
      Ptr (Complex Float)
v2tPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
v2t
      Ptr CInt
ldv2tPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldv2t
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr Float
rworkPtr <- IOArray ZeroInt Float
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr Float)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt Float
rwork
      Ptr CInt
lrworkPtr <- Int
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lrwork
      Ptr CInt
iworkPtr <- IOArray ZeroInt CInt
-> FortranIO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr CInt)
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt CInt
iwork
      Ptr CInt
infoPtr <- FortranIO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
  (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      ())
-> IO ()
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr Float
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.uncsd Ptr CChar
jobu1Ptr Ptr CChar
jobu2Ptr Ptr CChar
jobv1tPtr Ptr CChar
jobv2tPtr Ptr CChar
transPtr Ptr CChar
signsPtr Ptr CInt
mPtr Ptr CInt
pPtr Ptr CInt
qPtr Ptr (Complex Float)
x11Ptr Ptr CInt
ldx11Ptr Ptr (Complex Float)
x12Ptr Ptr CInt
ldx12Ptr Ptr (Complex Float)
x21Ptr Ptr CInt
ldx21Ptr Ptr (Complex Float)
x22Ptr Ptr CInt
ldx22Ptr Ptr Float
thetaPtr Ptr (Complex Float)
u1Ptr Ptr CInt
ldu1Ptr Ptr (Complex Float)
u2Ptr Ptr CInt
ldu2Ptr Ptr (Complex Float)
v1tPtr Ptr CInt
ldv1tPtr Ptr (Complex Float)
v2tPtr Ptr CInt
ldv2tPtr Ptr (Complex Float)
workPtr Ptr CInt
lworkPtr Ptr Float
rworkPtr Ptr CInt
lrworkPtr Ptr CInt
iworkPtr Ptr CInt
infoPtr
      IO
  (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float),
   Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO
   (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float),
    Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array ZeroInt Float
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int
 -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float),
     Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array ZeroInt Float
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,,,,,)
         IO
  (Array ZeroInt Float
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array ZeroInt Float)
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray ZeroInt Float -> IO (Array ZeroInt Float)
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray ZeroInt Float
theta
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
u1
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
u2
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
v1t
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO
     (Int
      -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float),
          Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
v2t
         IO
  (Int
   -> (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float),
       Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int
-> IO
     (Array ZeroInt Float, Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex Float),
      Array (ZeroInt, ZeroInt) (Complex 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/cung2l.f>
ung2l ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IO (Int)
ung2l :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IO Int
ung2l Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.ung2l Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
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/cung2r.f>
ung2r ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IO (Int)
ung2r :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IO Int
ung2r Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
n
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.ung2r Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
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/cungbr.f>
ungbr ::
   Char {- ^ vect -} ->
   Int {- ^ m -} ->
   Int {- ^ k -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   Int {- ^ lwork -} ->
   IO (Int)
ungbr :: Char
-> Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> Int
-> IO Int
ungbr Char
vect Int
m Int
k IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let _tauSize :: Int
_tauSize = Int
tauDim0
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ungbr Ptr CChar
vectPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
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/cunghr.f>
unghr ::
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   Int {- ^ lwork -} ->
   IO (Int)
unghr :: Int
-> Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> Int
-> IO Int
unghr Int
ilo Int
ihi IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"unghr: n-1 == tauDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unghr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
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/cungl2.f>
ungl2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IO (Int)
ungl2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IO Int
ungl2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.ungl2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
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/cunglq.f>
unglq ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   Int {- ^ lwork -} ->
   IO (Int)
unglq :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> Int
-> IO Int
unglq Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unglq Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
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/cungql.f>
ungql ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   Int {- ^ lwork -} ->
   IO (Int)
ungql :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> Int
-> IO Int
ungql Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ungql Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
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/cungqr.f>
ungqr ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   Int {- ^ lwork -} ->
   IO (Int)
ungqr :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> Int
-> IO Int
ungqr Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ungqr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
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/cungr2.f>
ungr2 ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IO (Int)
ungr2 :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IO Int
ungr2 Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
m
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.ungr2 Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
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/cungrq.f>
ungrq ::
   Int {- ^ m -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   Int {- ^ lwork -} ->
   IO (Int)
ungrq :: Int
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> Int
-> IO Int
ungrq Int
m IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ungrq Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
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/cungtr.f>
ungtr ::
   Char {- ^ uplo -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   Int {- ^ lwork -} ->
   IO (Int)
ungtr :: Char
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> Int
-> IO Int
ungtr Char
uplo IOArray (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let n :: Int
n = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   String -> Bool -> IO ()
Call.assert String
"ungtr: n-1 == tauDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.ungtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
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/cunm2l.f>
unm2l ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO (Int)
unm2l :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
unm2l Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
workSize = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let k :: Int
k = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   String -> Bool -> IO ()
Call.assert String
"unm2l: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.unm2l Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
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/cunm2r.f>
unm2r ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO (Int)
unm2r :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
unm2r Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
workSize = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let k :: Int
k = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   String -> Bool -> IO ()
Call.assert String
"unm2r: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.unm2r Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
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/cunmbr.f>
unmbr ::
   Char {- ^ vect -} ->
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Int {- ^ k -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
unmbr :: Char
-> Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
unmbr Char
vect Char
side Char
trans Int
m Int
k Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let _aSize :: Int
_aSize = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   String -> Int -> IO ()
Call.ignore String
"unmbr: minimum[nq,k] == tauDim0" Int
tauDim0
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmbr Ptr CChar
vectPtr Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
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/cunmhr.f>
unmhr ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Int {- ^ ilo -} ->
   Int {- ^ ihi -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
unmhr :: Char
-> Char
-> Int
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
unmhr Char
side Char
trans Int
m Int
ilo Int
ihi Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let _aSize :: Int
_aSize = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let _tauSize :: Int
_tauSize = Int
tauDim0
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmhr Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
iloPtr Ptr CInt
ihiPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
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/cunml2.f>
unml2 ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO (Int)
unml2 :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
unml2 Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
workSize = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let _aSize :: Int
_aSize = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.unml2 Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
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/cunmlq.f>
unmlq ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
unmlq :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
unmlq Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let _aSize :: Int
_aSize = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmlq Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
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/cunmql.f>
unmql ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
unmql :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
unmql Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let k :: Int
k = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   String -> Bool -> IO ()
Call.assert String
"unmql: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmql Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
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/cunmqr.f>
unmqr ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
unmqr :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
unmqr Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let k :: Int
k = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   String -> Bool -> IO ()
Call.assert String
"unmqr: k == tauDim0" (Int
k Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmqr Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
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/cunmr2.f>
unmr2 ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO (Int)
unmr2 :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
unmr2 Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
workSize = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let _aSize :: Int
_aSize = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.unmr2 Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
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/cunmr3.f>
unmr3 ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Int {- ^ l -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO (Int)
unmr3 :: Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
unmr3 Char
side Char
trans Int
m Int
l Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
workSize = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let _aSize :: Int
_aSize = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr CInt
kPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
k
      Ptr CInt
lPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
l
      Ptr (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.unmr3 Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
lPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
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/cunmrq.f>
unmrq ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
unmrq :: Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
unmrq Char
side Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let _aSize :: Int
_aSize = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmrq Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
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/cunmrz.f>
unmrz ::
   Char {- ^ side -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Int {- ^ l -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
unmrz :: Char
-> Char
-> Int
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
unmrz Char
side Char
trans Int
m Int
l Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let _aSize :: Int
_aSize = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let k :: Int
k = Int
tauDim0
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmrz Ptr CChar
sidePtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr CInt
kPtr Ptr CInt
lPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
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/cunmtr.f>
unmtr ::
   Char {- ^ side -} ->
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array (ZeroInt,ZeroInt) (Complex Float) {- ^ a -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ lwork -} ->
   IO (Int)
unmtr :: Char
-> Char
-> Char
-> Int
-> Array (ZeroInt, ZeroInt) (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
unmtr Char
side Char
uplo Char
trans Int
m Array (ZeroInt, ZeroInt) (Complex Float)
a Array ZeroInt (Complex Float)
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
lwork = do
   let (Int
aDim0,Int
aDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ Array (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall sh a. Array sh a -> sh
Array.shape Array (ZeroInt, ZeroInt) (Complex Float)
a
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let _aSize :: Int
_aSize = Int
aDim0
   let lda :: Int
lda = Int
aDim1
   let _tauSize :: Int
_tauSize = Int
tauDim0
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
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 (Complex Float)
aPtr <- Array (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array (ZeroInt, ZeroInt) (Complex Float)
a
      Ptr CInt
ldaPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lda
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
lworkPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
lwork
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr CInt
-> IO ()
FFI.unmtr Ptr CChar
sidePtr Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
aPtr Ptr CInt
ldaPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
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/cupgtr.f>
upgtr ::
   Char {- ^ uplo -} ->
   Int {- ^ n -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   Int {- ^ ldq -} ->
   IO (Array (ZeroInt,ZeroInt) (Complex Float), Int)
upgtr :: Char
-> Int
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> Int
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
upgtr Char
uplo Int
n Array ZeroInt (Complex Float)
ap Array ZeroInt (Complex Float)
tau Int
ldq = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   String -> Bool -> IO ()
Call.assert String
"upgtr: n*(n+1)`div`2 == apDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
*(Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1)Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div`Int
2 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
apDim0)
   String -> Bool -> IO ()
Call.assert String
"upgtr: n-1 == tauDim0" (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
tauDim0)
   IOArray (ZeroInt, ZeroInt) (Complex Float)
q <- Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) (Complex Float))
forall e.
Storable e =>
Int -> Int -> IO (IOArray (ZeroInt, ZeroInt) e)
Call.newArray2 Int
n Int
ldq
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 (Int
nInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1)
   ContT
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
  IO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
   IO
   (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
uploPtr <- Char
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CInt
nPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
qPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
      Ptr CInt
ldqPtr <- Int
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldq
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO
  (Array (ZeroInt, ZeroInt) (Complex Float), Int) (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ()
 -> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ())
-> IO ()
-> ContT (Array (ZeroInt, ZeroInt) (Complex Float), Int) IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.upgtr Ptr CChar
uploPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
qPtr Ptr CInt
ldqPtr Ptr (Complex Float)
workPtr Ptr CInt
infoPtr
      IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
 -> ContT
      (Array (ZeroInt, ZeroInt) (Complex Float), Int)
      IO
      (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float), Int)
-> ContT
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
     IO
     (Array (ZeroInt, ZeroInt) (Complex Float), Int)
forall a b. (a -> b) -> a -> b
$ (Array (ZeroInt, ZeroInt) (Complex Float)
 -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO
     (Array (ZeroInt, ZeroInt) (Complex Float)
      -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (,)
         IO
  (Array (ZeroInt, ZeroInt) (Complex Float)
   -> Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
-> IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> IO (Array (ZeroInt, ZeroInt) (Complex Float))
forall sh e. (C sh, Storable e) => IOArray sh e -> IO (Array sh e)
Call.freezeArray IOArray (ZeroInt, ZeroInt) (Complex Float)
q
         IO (Int -> (Array (ZeroInt, ZeroInt) (Complex Float), Int))
-> IO Int -> IO (Array (ZeroInt, ZeroInt) (Complex 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/cupmtr.f>
upmtr ::
   Char {- ^ side -} ->
   Char {- ^ uplo -} ->
   Char {- ^ trans -} ->
   Int {- ^ m -} ->
   Array ZeroInt (Complex Float) {- ^ ap -} ->
   Array ZeroInt (Complex Float) {- ^ tau -} ->
   IOArray (ZeroInt,ZeroInt) (Complex Float) {- ^ c -} ->
   Int {- ^ workSize -} ->
   IO (Int)
upmtr :: Char
-> Char
-> Char
-> Int
-> Array ZeroInt (Complex Float)
-> Array ZeroInt (Complex Float)
-> IOArray (ZeroInt, ZeroInt) (Complex Float)
-> Int
-> IO Int
upmtr Char
side Char
uplo Char
trans Int
m Array ZeroInt (Complex Float)
ap Array ZeroInt (Complex Float)
tau IOArray (ZeroInt, ZeroInt) (Complex Float)
c Int
workSize = do
   let apDim0 :: Int
apDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
ap
   let tauDim0 :: Int
tauDim0 = ZeroInt -> Int
forall sh0. C sh0 => sh0 -> Int
Call.sizes1 (ZeroInt -> Int) -> ZeroInt -> Int
forall a b. (a -> b) -> a -> b
$ Array ZeroInt (Complex Float) -> ZeroInt
forall sh a. Array sh a -> sh
Array.shape Array ZeroInt (Complex Float)
tau
   let (Int
cDim0,Int
cDim1) = (ZeroInt, ZeroInt) -> (Int, Int)
forall sh0 sh1. (C sh0, C sh1) => (sh0, sh1) -> (Int, Int)
Call.sizes2 ((ZeroInt, ZeroInt) -> (Int, Int))
-> (ZeroInt, ZeroInt) -> (Int, Int)
forall a b. (a -> b) -> a -> b
$ IOArray (ZeroInt, ZeroInt) (Complex Float) -> (ZeroInt, ZeroInt)
forall (m :: * -> *) sh a. Array m sh a -> sh
MutArray.shape IOArray (ZeroInt, ZeroInt) (Complex Float)
c
   let _apSize :: Int
_apSize = Int
apDim0
   let _tauSize :: Int
_tauSize = Int
tauDim0
   let n :: Int
n = Int
cDim0
   let ldc :: Int
ldc = Int
cDim1
   IOArray ZeroInt (Complex Float)
work <- Int -> IO (IOArray ZeroInt (Complex Float))
forall e. Storable e => Int -> IO (IOArray ZeroInt e)
Call.newArray1 Int
workSize
   ContT Int IO Int -> IO Int
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Int IO Int -> IO Int) -> ContT Int IO Int -> IO Int
forall a b. (a -> b) -> a -> b
$ do
      Ptr CChar
sidePtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
side
      Ptr CChar
uploPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
uplo
      Ptr CChar
transPtr <- Char -> FortranIO Int (Ptr CChar)
forall r. Char -> FortranIO r (Ptr CChar)
Call.char Char
trans
      Ptr CInt
mPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
m
      Ptr CInt
nPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
n
      Ptr (Complex Float)
apPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
ap
      Ptr (Complex Float)
tauPtr <- Array ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => Array i a -> FortranIO r (Ptr a)
Call.array Array ZeroInt (Complex Float)
tau
      Ptr (Complex Float)
cPtr <- IOArray (ZeroInt, ZeroInt) (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray (ZeroInt, ZeroInt) (Complex Float)
c
      Ptr CInt
ldcPtr <- Int -> FortranIO Int (Ptr CInt)
forall r. Int -> FortranIO r (Ptr CInt)
Call.cint Int
ldc
      Ptr (Complex Float)
workPtr <- IOArray ZeroInt (Complex Float)
-> FortranIO Int (Ptr (Complex Float))
forall a i r. Storable a => IOArray i a -> FortranIO r (Ptr a)
Call.ioarray IOArray ZeroInt (Complex Float)
work
      Ptr CInt
infoPtr <- FortranIO Int (Ptr CInt)
forall a r. Storable a => FortranIO r (Ptr a)
Call.alloca
      IO () -> ContT Int IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> ContT Int IO ()) -> IO () -> ContT Int IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CChar
-> Ptr CChar
-> Ptr CChar
-> Ptr CInt
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr (Complex Float)
-> Ptr CInt
-> Ptr (Complex Float)
-> Ptr CInt
-> IO ()
FFI.upmtr Ptr CChar
sidePtr Ptr CChar
uploPtr Ptr CChar
transPtr Ptr CInt
mPtr Ptr CInt
nPtr Ptr (Complex Float)
apPtr Ptr (Complex Float)
tauPtr Ptr (Complex Float)
cPtr Ptr CInt
ldcPtr Ptr (Complex Float)
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)