-- Do not edit! Automatically generated by create-lapack-ffi.
module Numeric.BLAS.FFI.Real (
   asum,
   axpy,
   copy,
   dot,
   gbmv,
   gemm,
   gemv,
   ger,
   sbmv,
   symv,
   syr,
   syr2,
   spmv,
   spr,
   spr2,
   iamax,
   nrm2,
   rot,
   rotg,
   rotm,
   rotmg,
   scal,
   swap,
   symm,
   syr2k,
   syrk,
   tbmv,
   tbsv,
   tpmv,
   tpsv,
   trmm,
   trmv,
   trsm,
   trsv,
   ) where

import qualified Numeric.BLAS.FFI.Float as S
import qualified Numeric.BLAS.FFI.Double as D

import qualified Numeric.Netlib.Class as Class

import Foreign.Ptr (Ptr)
import Foreign.C.Types



newtype ASUM a = ASUM {getASUM :: Ptr CInt -> Ptr a -> Ptr CInt -> IO a}

asum :: Class.Real a => Ptr CInt -> Ptr a -> Ptr CInt -> IO a
asum = getASUM $ Class.switchReal (ASUM S.asum) (ASUM D.asum)


newtype AXPY a = AXPY {getAXPY :: Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()}

axpy :: Class.Real a => Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()
axpy = getAXPY $ Class.switchReal (AXPY S.axpy) (AXPY D.axpy)


newtype COPY a = COPY {getCOPY :: Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()}

copy :: Class.Real a => Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()
copy = getCOPY $ Class.switchReal (COPY S.copy) (COPY D.copy)


newtype DOT a = DOT {getDOT :: Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO a}

dot :: Class.Real a => Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO a
dot = getDOT $ Class.switchReal (DOT S.dot) (DOT D.dot)


newtype GBMV a = GBMV {getGBMV :: Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()}

gbmv :: Class.Real a => Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()
gbmv = getGBMV $ Class.switchReal (GBMV S.gbmv) (GBMV D.gbmv)


newtype GEMM a = GEMM {getGEMM :: Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()}

gemm :: Class.Real a => Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()
gemm = getGEMM $ Class.switchReal (GEMM S.gemm) (GEMM D.gemm)


newtype GEMV a = GEMV {getGEMV :: Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()}

gemv :: Class.Real a => Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()
gemv = getGEMV $ Class.switchReal (GEMV S.gemv) (GEMV D.gemv)


newtype GER a = GER {getGER :: Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()}

ger :: Class.Real a => Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()
ger = getGER $ Class.switchReal (GER S.ger) (GER D.ger)


newtype SBMV a = SBMV {getSBMV :: Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()}

sbmv :: Class.Real a => Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()
sbmv = getSBMV $ Class.switchReal (SBMV S.sbmv) (SBMV D.sbmv)


newtype SYMV a = SYMV {getSYMV :: Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()}

symv :: Class.Real a => Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()
symv = getSYMV $ Class.switchReal (SYMV S.symv) (SYMV D.symv)


newtype SYR a = SYR {getSYR :: Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()}

syr :: Class.Real a => Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()
syr = getSYR $ Class.switchReal (SYR S.syr) (SYR D.syr)


newtype SYR2 a = SYR2 {getSYR2 :: Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()}

syr2 :: Class.Real a => Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()
syr2 = getSYR2 $ Class.switchReal (SYR2 S.syr2) (SYR2 D.syr2)


newtype SPMV a = SPMV {getSPMV :: Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()}

spmv :: Class.Real a => Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()
spmv = getSPMV $ Class.switchReal (SPMV S.spmv) (SPMV D.spmv)


newtype SPR a = SPR {getSPR :: Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> IO ()}

spr :: Class.Real a => Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> IO ()
spr = getSPR $ Class.switchReal (SPR S.spr) (SPR D.spr)


newtype SPR2 a = SPR2 {getSPR2 :: Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> IO ()}

spr2 :: Class.Real a => Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> IO ()
spr2 = getSPR2 $ Class.switchReal (SPR2 S.spr2) (SPR2 D.spr2)


newtype IAMAX a = IAMAX {getIAMAX :: Ptr CInt -> Ptr a -> Ptr CInt -> IO CInt}

iamax :: Class.Real a => Ptr CInt -> Ptr a -> Ptr CInt -> IO CInt
iamax = getIAMAX $ Class.switchReal (IAMAX S.iamax) (IAMAX D.iamax)


newtype NRM2 a = NRM2 {getNRM2 :: Ptr CInt -> Ptr a -> Ptr CInt -> IO a}

nrm2 :: Class.Real a => Ptr CInt -> Ptr a -> Ptr CInt -> IO a
nrm2 = getNRM2 $ Class.switchReal (NRM2 S.nrm2) (NRM2 D.nrm2)


newtype ROT a = ROT {getROT :: Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> IO ()}

rot :: Class.Real a => Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> IO ()
rot = getROT $ Class.switchReal (ROT S.rot) (ROT D.rot)


newtype ROTG a = ROTG {getROTG :: Ptr a -> Ptr a -> Ptr a -> Ptr a -> IO ()}

rotg :: Class.Real a => Ptr a -> Ptr a -> Ptr a -> Ptr a -> IO ()
rotg = getROTG $ Class.switchReal (ROTG S.rotg) (ROTG D.rotg)


newtype ROTM a = ROTM {getROTM :: Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> IO ()}

rotm :: Class.Real a => Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> IO ()
rotm = getROTM $ Class.switchReal (ROTM S.rotm) (ROTM D.rotm)


newtype ROTMG a = ROTMG {getROTMG :: Ptr a -> Ptr a -> Ptr a -> Ptr a -> Ptr a -> IO ()}

rotmg :: Class.Real a => Ptr a -> Ptr a -> Ptr a -> Ptr a -> Ptr a -> IO ()
rotmg = getROTMG $ Class.switchReal (ROTMG S.rotmg) (ROTMG D.rotmg)


newtype SCAL a = SCAL {getSCAL :: Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()}

scal :: Class.Real a => Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()
scal = getSCAL $ Class.switchReal (SCAL S.scal) (SCAL D.scal)


newtype SWAP a = SWAP {getSWAP :: Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()}

swap :: Class.Real a => Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()
swap = getSWAP $ Class.switchReal (SWAP S.swap) (SWAP D.swap)


newtype SYMM a = SYMM {getSYMM :: Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()}

symm :: Class.Real a => Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()
symm = getSYMM $ Class.switchReal (SYMM S.symm) (SYMM D.symm)


newtype SYR2K a = SYR2K {getSYR2K :: Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()}

syr2k :: Class.Real a => Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()
syr2k = getSYR2K $ Class.switchReal (SYR2K S.syr2k) (SYR2K D.syr2k)


newtype SYRK a = SYRK {getSYRK :: Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()}

syrk :: Class.Real a => Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()
syrk = getSYRK $ Class.switchReal (SYRK S.syrk) (SYRK D.syrk)


newtype TBMV a = TBMV {getTBMV :: Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()}

tbmv :: Class.Real a => Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()
tbmv = getTBMV $ Class.switchReal (TBMV S.tbmv) (TBMV D.tbmv)


newtype TBSV a = TBSV {getTBSV :: Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()}

tbsv :: Class.Real a => Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()
tbsv = getTBSV $ Class.switchReal (TBSV S.tbsv) (TBSV D.tbsv)


newtype TPMV a = TPMV {getTPMV :: Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()}

tpmv :: Class.Real a => Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()
tpmv = getTPMV $ Class.switchReal (TPMV S.tpmv) (TPMV D.tpmv)


newtype TPSV a = TPSV {getTPSV :: Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()}

tpsv :: Class.Real a => Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> IO ()
tpsv = getTPSV $ Class.switchReal (TPSV S.tpsv) (TPSV D.tpsv)


newtype TRMM a = TRMM {getTRMM :: Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()}

trmm :: Class.Real a => Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()
trmm = getTRMM $ Class.switchReal (TRMM S.trmm) (TRMM D.trmm)


newtype TRMV a = TRMV {getTRMV :: Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()}

trmv :: Class.Real a => Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()
trmv = getTRMV $ Class.switchReal (TRMV S.trmv) (TRMV D.trmv)


newtype TRSM a = TRSM {getTRSM :: Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()}

trsm :: Class.Real a => Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr CInt -> Ptr a -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()
trsm = getTRSM $ Class.switchReal (TRSM S.trsm) (TRSM D.trsm)


newtype TRSV a = TRSV {getTRSV :: Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()}

trsv :: Class.Real a => Ptr CChar -> Ptr CChar -> Ptr CChar -> Ptr CInt -> Ptr a -> Ptr CInt -> Ptr a -> Ptr CInt -> IO ()
trsv = getTRSV $ Class.switchReal (TRSV S.trsv) (TRSV D.trsv)