-- GENERATED by C->Haskell Compiler, version 0.28.3 Switcheroo, 25 November 2017 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}
--
-- This module is auto-generated. Do not edit directly.
--

{-# LANGUAGE CPP #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
-- |
-- Module      : Foreign.CUDA.BLAS.Sparse.Level3
-- Copyright   : [2017] Trevor L. McDonell
-- License     : BSD3
--
-- Maintainer  : Trevor L. McDonell <tmcdonell@cse.unsw.edu.au>
-- Stability   : experimental
-- Portability : non-portable (GHC extensions)
--
-- For more information see the cuSPARSE Level-3 function reference:
--
-- <http://docs.nvidia.com/cuda/cusparse/index.html#cusparse-level-3-function-reference>
--

module Foreign.CUDA.BLAS.Sparse.Level3 (

  Operation(..),
  Policy(..),
  MatrixDescriptor,
  Info,
  Info_bsrsm2,
  Info_csrgemm2,
  scsrmm,
  dcsrmm,
  ccsrmm,
  zcsrmm,
  scsrmm2,
  dcsrmm2,
  ccsrmm2,
  zcsrmm2,
  scsrsm_analysis,
  dcsrsm_analysis,
  ccsrsm_analysis,
  zcsrsm_analysis,
  scsrsm_solve,
  dcsrsm_solve,
  ccsrsm_solve,
  zcsrsm_solve,
  sbsrmm,
  dbsrmm,
  cbsrmm,
  zbsrmm,
  sbsrsm2_bufferSize,
  dbsrsm2_bufferSize,
  cbsrsm2_bufferSize,
  zbsrsm2_bufferSize,
  sbsrsm2_analysis,
  dbsrsm2_analysis,
  cbsrsm2_analysis,
  zbsrsm2_analysis,
  sbsrsm2_solve,
  dbsrsm2_solve,
  cbsrsm2_solve,
  zbsrsm2_solve,
  xbsrsm2_zeroPivot,
  xcsrgeamNnz,
  scsrgeam,
  dcsrgeam,
  ccsrgeam,
  zcsrgeam,
  xcsrgemmNnz,
  scsrgemm,
  dcsrgemm,
  ccsrgemm,
  zcsrgemm,
  scsrgemm2_bufferSizeExt,
  dcsrgemm2_bufferSizeExt,
  ccsrgemm2_bufferSizeExt,
  zcsrgemm2_bufferSizeExt,
  xcsrgemm2Nnz,
  scsrgemm2,
  dcsrgemm2,
  ccsrgemm2,
  zcsrgemm2,

) where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp



import Data.Complex
import Numeric.Half
import Foreign
import Foreign.C
import Foreign.Storable.Complex ()
import Foreign.CUDA.Ptr
import Foreign.CUDA.BLAS.Sparse.Analysis
import Foreign.CUDA.BLAS.Sparse.Context
import Foreign.CUDA.BLAS.Sparse.Error
import Foreign.CUDA.BLAS.Sparse.Internal.C2HS
import Foreign.CUDA.BLAS.Sparse.Internal.Types
import Foreign.CUDA.BLAS.Sparse.Matrix.Descriptor
import Foreign.CUDA.BLAS.Sparse.Matrix.Hybrid



{-# LINE 101 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINE useDevP #-}
useDevP :: DevicePtr a -> Ptr b
useDevP = useDevicePtr . castDevPtr

{-# INLINE useHostP #-}
useHostP :: HostPtr a -> Ptr b
useHostP = useHostPtr . castHostPtr


{-# INLINEABLE scsrmm #-}
scsrmm :: (Handle) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Int) -> (Ptr Float) -> (MatrixDescriptor) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (DevicePtr Float) -> (Int) -> (Ptr Float) -> (DevicePtr Float) -> (Int) -> IO ()
scsrmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = castPtr a7} in 
  let {a8' = useMatDescr a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = fromIntegral a13} in 
  let {a14' = castPtr a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = fromIntegral a16} in 
  scsrmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 113 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE dcsrmm #-}
dcsrmm :: (Handle) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Int) -> (Ptr Double) -> (MatrixDescriptor) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (DevicePtr Double) -> (Int) -> (Ptr Double) -> (DevicePtr Double) -> (Int) -> IO ()
dcsrmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = castPtr a7} in 
  let {a8' = useMatDescr a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = fromIntegral a13} in 
  let {a14' = castPtr a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = fromIntegral a16} in 
  dcsrmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 116 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE ccsrmm #-}
ccsrmm :: (Handle) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Int) -> (Ptr (Complex Float)) -> (MatrixDescriptor) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (DevicePtr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (DevicePtr (Complex Float)) -> (Int) -> IO ()
ccsrmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = castPtr a7} in 
  let {a8' = useMatDescr a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = fromIntegral a13} in 
  let {a14' = castPtr a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = fromIntegral a16} in 
  ccsrmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 119 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE zcsrmm #-}
zcsrmm :: (Handle) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Int) -> (Ptr (Complex Double)) -> (MatrixDescriptor) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (DevicePtr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (DevicePtr (Complex Double)) -> (Int) -> IO ()
zcsrmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = castPtr a7} in 
  let {a8' = useMatDescr a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = fromIntegral a13} in 
  let {a14' = castPtr a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = fromIntegral a16} in 
  zcsrmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 122 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE scsrmm2 #-}
scsrmm2 :: (Handle) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Int) -> (Ptr Float) -> (MatrixDescriptor) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (DevicePtr Float) -> (Int) -> (Ptr Float) -> (DevicePtr Float) -> (Int) -> IO ()
scsrmm2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = castPtr a8} in 
  let {a9' = useMatDescr a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = fromIntegral a14} in 
  let {a15' = castPtr a15} in 
  let {a16' = useDevP a16} in 
  let {a17' = fromIntegral a17} in 
  scsrmm2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 125 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE dcsrmm2 #-}
dcsrmm2 :: (Handle) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Int) -> (Ptr Double) -> (MatrixDescriptor) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (DevicePtr Double) -> (Int) -> (Ptr Double) -> (DevicePtr Double) -> (Int) -> IO ()
dcsrmm2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = castPtr a8} in 
  let {a9' = useMatDescr a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = fromIntegral a14} in 
  let {a15' = castPtr a15} in 
  let {a16' = useDevP a16} in 
  let {a17' = fromIntegral a17} in 
  dcsrmm2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 128 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE ccsrmm2 #-}
ccsrmm2 :: (Handle) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Int) -> (Ptr (Complex Float)) -> (MatrixDescriptor) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (DevicePtr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (DevicePtr (Complex Float)) -> (Int) -> IO ()
ccsrmm2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = castPtr a8} in 
  let {a9' = useMatDescr a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = fromIntegral a14} in 
  let {a15' = castPtr a15} in 
  let {a16' = useDevP a16} in 
  let {a17' = fromIntegral a17} in 
  ccsrmm2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 131 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE zcsrmm2 #-}
zcsrmm2 :: (Handle) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Int) -> (Ptr (Complex Double)) -> (MatrixDescriptor) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (DevicePtr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (DevicePtr (Complex Double)) -> (Int) -> IO ()
zcsrmm2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = castPtr a8} in 
  let {a9' = useMatDescr a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = fromIntegral a14} in 
  let {a15' = castPtr a15} in 
  let {a16' = useDevP a16} in 
  let {a17' = fromIntegral a17} in 
  zcsrmm2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 134 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE scsrsm_analysis #-}
scsrsm_analysis :: (Handle) -> (Operation) -> (Int) -> (Int) -> (MatrixDescriptor) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info) -> IO ()
scsrsm_analysis a1 a2 a3 a4 a5 a6 a7 a8 a9 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = useMatDescr a5} in 
  let {a6' = useDevP a6} in 
  let {a7' = useDevP a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useInfo a9} in 
  scsrsm_analysis'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 137 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE dcsrsm_analysis #-}
dcsrsm_analysis :: (Handle) -> (Operation) -> (Int) -> (Int) -> (MatrixDescriptor) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info) -> IO ()
dcsrsm_analysis a1 a2 a3 a4 a5 a6 a7 a8 a9 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = useMatDescr a5} in 
  let {a6' = useDevP a6} in 
  let {a7' = useDevP a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useInfo a9} in 
  dcsrsm_analysis'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 140 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE ccsrsm_analysis #-}
ccsrsm_analysis :: (Handle) -> (Operation) -> (Int) -> (Int) -> (MatrixDescriptor) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info) -> IO ()
ccsrsm_analysis a1 a2 a3 a4 a5 a6 a7 a8 a9 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = useMatDescr a5} in 
  let {a6' = useDevP a6} in 
  let {a7' = useDevP a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useInfo a9} in 
  ccsrsm_analysis'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 143 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE zcsrsm_analysis #-}
zcsrsm_analysis :: (Handle) -> (Operation) -> (Int) -> (Int) -> (MatrixDescriptor) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info) -> IO ()
zcsrsm_analysis a1 a2 a3 a4 a5 a6 a7 a8 a9 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = useMatDescr a5} in 
  let {a6' = useDevP a6} in 
  let {a7' = useDevP a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useInfo a9} in 
  zcsrsm_analysis'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 146 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE scsrsm_solve #-}
scsrsm_solve :: (Handle) -> (Operation) -> (Int) -> (Int) -> (Ptr Float) -> (MatrixDescriptor) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info) -> (DevicePtr Float) -> (Int) -> (DevicePtr Float) -> (Int) -> IO ()
scsrsm_solve a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = castPtr a5} in 
  let {a6' = useMatDescr a6} in 
  let {a7' = useDevP a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useInfo a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = fromIntegral a14} in 
  scsrsm_solve'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 149 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE dcsrsm_solve #-}
dcsrsm_solve :: (Handle) -> (Operation) -> (Int) -> (Int) -> (Ptr Double) -> (MatrixDescriptor) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info) -> (DevicePtr Double) -> (Int) -> (DevicePtr Double) -> (Int) -> IO ()
dcsrsm_solve a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = castPtr a5} in 
  let {a6' = useMatDescr a6} in 
  let {a7' = useDevP a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useInfo a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = fromIntegral a14} in 
  dcsrsm_solve'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 152 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE ccsrsm_solve #-}
ccsrsm_solve :: (Handle) -> (Operation) -> (Int) -> (Int) -> (Ptr (Complex Float)) -> (MatrixDescriptor) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info) -> (DevicePtr (Complex Float)) -> (Int) -> (DevicePtr (Complex Float)) -> (Int) -> IO ()
ccsrsm_solve a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = castPtr a5} in 
  let {a6' = useMatDescr a6} in 
  let {a7' = useDevP a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useInfo a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = fromIntegral a14} in 
  ccsrsm_solve'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 155 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE zcsrsm_solve #-}
zcsrsm_solve :: (Handle) -> (Operation) -> (Int) -> (Int) -> (Ptr (Complex Double)) -> (MatrixDescriptor) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info) -> (DevicePtr (Complex Double)) -> (Int) -> (DevicePtr (Complex Double)) -> (Int) -> IO ()
zcsrsm_solve a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = castPtr a5} in 
  let {a6' = useMatDescr a6} in 
  let {a7' = useDevP a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useInfo a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = fromIntegral a14} in 
  zcsrsm_solve'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 158 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE sbsrmm #-}
sbsrmm :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Int) -> (Ptr Float) -> (MatrixDescriptor) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (DevicePtr Float) -> (Int) -> (Ptr Float) -> (DevicePtr Float) -> (Int) -> IO ()
sbsrmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = fromIntegral a8} in 
  let {a9' = castPtr a9} in 
  let {a10' = useMatDescr a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = fromIntegral a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = fromIntegral a16} in 
  let {a17' = castPtr a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = fromIntegral a19} in 
  sbsrmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 161 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE dbsrmm #-}
dbsrmm :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Int) -> (Ptr Double) -> (MatrixDescriptor) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (DevicePtr Double) -> (Int) -> (Ptr Double) -> (DevicePtr Double) -> (Int) -> IO ()
dbsrmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = fromIntegral a8} in 
  let {a9' = castPtr a9} in 
  let {a10' = useMatDescr a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = fromIntegral a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = fromIntegral a16} in 
  let {a17' = castPtr a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = fromIntegral a19} in 
  dbsrmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 164 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE cbsrmm #-}
cbsrmm :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Int) -> (Ptr (Complex Float)) -> (MatrixDescriptor) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (DevicePtr (Complex Float)) -> (Int) -> (Ptr (Complex Float)) -> (DevicePtr (Complex Float)) -> (Int) -> IO ()
cbsrmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = fromIntegral a8} in 
  let {a9' = castPtr a9} in 
  let {a10' = useMatDescr a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = fromIntegral a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = fromIntegral a16} in 
  let {a17' = castPtr a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = fromIntegral a19} in 
  cbsrmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 167 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE zbsrmm #-}
zbsrmm :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Int) -> (Ptr (Complex Double)) -> (MatrixDescriptor) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (DevicePtr (Complex Double)) -> (Int) -> (Ptr (Complex Double)) -> (DevicePtr (Complex Double)) -> (Int) -> IO ()
zbsrmm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = fromIntegral a8} in 
  let {a9' = castPtr a9} in 
  let {a10' = useMatDescr a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = fromIntegral a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = fromIntegral a16} in 
  let {a17' = castPtr a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = fromIntegral a19} in 
  zbsrmm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 170 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE sbsrsm2_bufferSize #-}
sbsrsm2_bufferSize :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (MatrixDescriptor) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (Info_bsrsm2) -> IO ((Int))
sbsrsm2_bufferSize a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useMatDescr a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useInfo_bsrsm2 a13} in 
  alloca $ \a14' -> 
  sbsrsm2_bufferSize'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>= \res ->
  checkStatus res >> 
  peekIntConv  a14'>>= \a14'' -> 
  return (a14'')

{-# LINE 173 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE dbsrsm2_bufferSize #-}
dbsrsm2_bufferSize :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (MatrixDescriptor) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (Info_bsrsm2) -> IO ((Int))
dbsrsm2_bufferSize a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useMatDescr a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useInfo_bsrsm2 a13} in 
  alloca $ \a14' -> 
  dbsrsm2_bufferSize'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>= \res ->
  checkStatus res >> 
  peekIntConv  a14'>>= \a14'' -> 
  return (a14'')

{-# LINE 176 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE cbsrsm2_bufferSize #-}
cbsrsm2_bufferSize :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (MatrixDescriptor) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (Info_bsrsm2) -> IO ((Int))
cbsrsm2_bufferSize a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useMatDescr a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useInfo_bsrsm2 a13} in 
  alloca $ \a14' -> 
  cbsrsm2_bufferSize'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>= \res ->
  checkStatus res >> 
  peekIntConv  a14'>>= \a14'' -> 
  return (a14'')

{-# LINE 179 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE zbsrsm2_bufferSize #-}
zbsrsm2_bufferSize :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (MatrixDescriptor) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (Info_bsrsm2) -> IO ((Int))
zbsrsm2_bufferSize a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useMatDescr a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useInfo_bsrsm2 a13} in 
  alloca $ \a14' -> 
  zbsrsm2_bufferSize'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>= \res ->
  checkStatus res >> 
  peekIntConv  a14'>>= \a14'' -> 
  return (a14'')

{-# LINE 182 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE sbsrsm2_analysis #-}
sbsrsm2_analysis :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (MatrixDescriptor) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (Info_bsrsm2) -> (Policy) -> (Ptr ()) -> IO ()
sbsrsm2_analysis a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useMatDescr a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useInfo_bsrsm2 a13} in 
  let {a14' = cFromEnum a14} in 
  let {a15' = castPtr a15} in 
  sbsrsm2_analysis'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 185 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE dbsrsm2_analysis #-}
dbsrsm2_analysis :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (MatrixDescriptor) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (Info_bsrsm2) -> (Policy) -> (Ptr ()) -> IO ()
dbsrsm2_analysis a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useMatDescr a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useInfo_bsrsm2 a13} in 
  let {a14' = cFromEnum a14} in 
  let {a15' = castPtr a15} in 
  dbsrsm2_analysis'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 188 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE cbsrsm2_analysis #-}
cbsrsm2_analysis :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (MatrixDescriptor) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (Info_bsrsm2) -> (Policy) -> (Ptr ()) -> IO ()
cbsrsm2_analysis a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useMatDescr a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useInfo_bsrsm2 a13} in 
  let {a14' = cFromEnum a14} in 
  let {a15' = castPtr a15} in 
  cbsrsm2_analysis'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 191 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE zbsrsm2_analysis #-}
zbsrsm2_analysis :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (MatrixDescriptor) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (Info_bsrsm2) -> (Policy) -> (Ptr ()) -> IO ()
zbsrsm2_analysis a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useMatDescr a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useInfo_bsrsm2 a13} in 
  let {a14' = cFromEnum a14} in 
  let {a15' = castPtr a15} in 
  zbsrsm2_analysis'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 194 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE sbsrsm2_solve #-}
sbsrsm2_solve :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Ptr Float) -> (MatrixDescriptor) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (Info_bsrsm2) -> (DevicePtr Float) -> (Int) -> (DevicePtr Float) -> (Int) -> (Policy) -> (Ptr ()) -> IO ()
sbsrsm2_solve a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = castPtr a8} in 
  let {a9' = useMatDescr a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = fromIntegral a13} in 
  let {a14' = useInfo_bsrsm2 a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = fromIntegral a16} in 
  let {a17' = useDevP a17} in 
  let {a18' = fromIntegral a18} in 
  let {a19' = cFromEnum a19} in 
  let {a20' = castPtr a20} in 
  sbsrsm2_solve'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 197 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE dbsrsm2_solve #-}
dbsrsm2_solve :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Ptr Double) -> (MatrixDescriptor) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (Info_bsrsm2) -> (DevicePtr Double) -> (Int) -> (DevicePtr Double) -> (Int) -> (Policy) -> (Ptr ()) -> IO ()
dbsrsm2_solve a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = castPtr a8} in 
  let {a9' = useMatDescr a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = fromIntegral a13} in 
  let {a14' = useInfo_bsrsm2 a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = fromIntegral a16} in 
  let {a17' = useDevP a17} in 
  let {a18' = fromIntegral a18} in 
  let {a19' = cFromEnum a19} in 
  let {a20' = castPtr a20} in 
  dbsrsm2_solve'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 200 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE cbsrsm2_solve #-}
cbsrsm2_solve :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Ptr (Complex Float)) -> (MatrixDescriptor) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (Info_bsrsm2) -> (DevicePtr (Complex Float)) -> (Int) -> (DevicePtr (Complex Float)) -> (Int) -> (Policy) -> (Ptr ()) -> IO ()
cbsrsm2_solve a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = castPtr a8} in 
  let {a9' = useMatDescr a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = fromIntegral a13} in 
  let {a14' = useInfo_bsrsm2 a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = fromIntegral a16} in 
  let {a17' = useDevP a17} in 
  let {a18' = fromIntegral a18} in 
  let {a19' = cFromEnum a19} in 
  let {a20' = castPtr a20} in 
  cbsrsm2_solve'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 203 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE zbsrsm2_solve #-}
zbsrsm2_solve :: (Handle) -> (Direction) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (Ptr (Complex Double)) -> (MatrixDescriptor) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Int) -> (Info_bsrsm2) -> (DevicePtr (Complex Double)) -> (Int) -> (DevicePtr (Complex Double)) -> (Int) -> (Policy) -> (Ptr ()) -> IO ()
zbsrsm2_solve a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = cFromEnum a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = castPtr a8} in 
  let {a9' = useMatDescr a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = fromIntegral a13} in 
  let {a14' = useInfo_bsrsm2 a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = fromIntegral a16} in 
  let {a17' = useDevP a17} in 
  let {a18' = fromIntegral a18} in 
  let {a19' = cFromEnum a19} in 
  let {a20' = castPtr a20} in 
  zbsrsm2_solve'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 206 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE xbsrsm2_zeroPivot #-}
xbsrsm2_zeroPivot :: (Handle) -> (Info_bsrsm2) -> (Ptr Int32) -> IO ()
xbsrsm2_zeroPivot a1 a2 a3 =
  let {a1' = useHandle a1} in 
  let {a2' = useInfo_bsrsm2 a2} in 
  let {a3' = castPtr a3} in 
  xbsrsm2_zeroPivot'_ a1' a2' a3' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 209 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE xcsrgeamNnz #-}
xcsrgeamNnz :: (Handle) -> (Int) -> (Int) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr Int32) -> (Ptr Int32) -> IO ()
xcsrgeamNnz a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 =
  let {a1' = useHandle a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = useMatDescr a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = useDevP a6} in 
  let {a7' = useDevP a7} in 
  let {a8' = useMatDescr a8} in 
  let {a9' = fromIntegral a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useMatDescr a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = castPtr a14} in 
  xcsrgeamNnz'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 212 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE scsrgeam #-}
scsrgeam :: (Handle) -> (Int) -> (Int) -> (Ptr Float) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Ptr Float) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> IO ()
scsrgeam a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 =
  let {a1' = useHandle a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = castPtr a4} in 
  let {a5' = useMatDescr a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = useDevP a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = castPtr a10} in 
  let {a11' = useMatDescr a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = useDevP a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = useMatDescr a16} in 
  let {a17' = useDevP a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = useDevP a19} in 
  scsrgeam'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 215 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE dcsrgeam #-}
dcsrgeam :: (Handle) -> (Int) -> (Int) -> (Ptr Double) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Ptr Double) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> IO ()
dcsrgeam a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 =
  let {a1' = useHandle a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = castPtr a4} in 
  let {a5' = useMatDescr a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = useDevP a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = castPtr a10} in 
  let {a11' = useMatDescr a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = useDevP a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = useMatDescr a16} in 
  let {a17' = useDevP a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = useDevP a19} in 
  dcsrgeam'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 218 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE ccsrgeam #-}
ccsrgeam :: (Handle) -> (Int) -> (Int) -> (Ptr (Complex Float)) -> (MatrixDescriptor) -> (Int) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Ptr (Complex Float)) -> (MatrixDescriptor) -> (Int) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> IO ()
ccsrgeam a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 =
  let {a1' = useHandle a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = castPtr a4} in 
  let {a5' = useMatDescr a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = useDevP a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = castPtr a10} in 
  let {a11' = useMatDescr a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = useDevP a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = useMatDescr a16} in 
  let {a17' = useDevP a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = useDevP a19} in 
  ccsrgeam'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 221 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE zcsrgeam #-}
zcsrgeam :: (Handle) -> (Int) -> (Int) -> (Ptr (Complex Double)) -> (MatrixDescriptor) -> (Int) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Ptr (Complex Double)) -> (MatrixDescriptor) -> (Int) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> IO ()
zcsrgeam a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 =
  let {a1' = useHandle a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = castPtr a4} in 
  let {a5' = useMatDescr a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = useDevP a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = castPtr a10} in 
  let {a11' = useMatDescr a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = useDevP a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = useMatDescr a16} in 
  let {a17' = useDevP a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = useDevP a19} in 
  zcsrgeam'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 224 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE xcsrgemmNnz #-}
xcsrgemmNnz :: (Handle) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr Int32) -> (Ptr Int32) -> IO ()
xcsrgemmNnz a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = useMatDescr a7} in 
  let {a8' = fromIntegral a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useMatDescr a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = useDevP a14} in 
  let {a15' = useMatDescr a15} in 
  let {a16' = useDevP a16} in 
  let {a17' = castPtr a17} in 
  xcsrgemmNnz'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 227 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE scsrgemm #-}
scsrgemm :: (Handle) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> IO ()
scsrgemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = useMatDescr a7} in 
  let {a8' = fromIntegral a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useMatDescr a12} in 
  let {a13' = fromIntegral a13} in 
  let {a14' = useDevP a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = useDevP a16} in 
  let {a17' = useMatDescr a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = useDevP a19} in 
  let {a20' = useDevP a20} in 
  scsrgemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 230 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE dcsrgemm #-}
dcsrgemm :: (Handle) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> IO ()
dcsrgemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = useMatDescr a7} in 
  let {a8' = fromIntegral a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useMatDescr a12} in 
  let {a13' = fromIntegral a13} in 
  let {a14' = useDevP a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = useDevP a16} in 
  let {a17' = useMatDescr a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = useDevP a19} in 
  let {a20' = useDevP a20} in 
  dcsrgemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 233 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE ccsrgemm #-}
ccsrgemm :: (Handle) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (MatrixDescriptor) -> (Int) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> IO ()
ccsrgemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = useMatDescr a7} in 
  let {a8' = fromIntegral a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useMatDescr a12} in 
  let {a13' = fromIntegral a13} in 
  let {a14' = useDevP a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = useDevP a16} in 
  let {a17' = useMatDescr a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = useDevP a19} in 
  let {a20' = useDevP a20} in 
  ccsrgemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 236 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE zcsrgemm #-}
zcsrgemm :: (Handle) -> (Operation) -> (Operation) -> (Int) -> (Int) -> (Int) -> (MatrixDescriptor) -> (Int) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> IO ()
zcsrgemm a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 =
  let {a1' = useHandle a1} in 
  let {a2' = cFromEnum a2} in 
  let {a3' = cFromEnum a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = fromIntegral a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = useMatDescr a7} in 
  let {a8' = fromIntegral a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useMatDescr a12} in 
  let {a13' = fromIntegral a13} in 
  let {a14' = useDevP a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = useDevP a16} in 
  let {a17' = useMatDescr a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = useDevP a19} in 
  let {a20' = useDevP a20} in 
  zcsrgemm'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 240 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE scsrgemm2_bufferSizeExt #-}
scsrgemm2_bufferSizeExt :: (Handle) -> (Int) -> (Int) -> (Int) -> (Ptr Float) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Ptr Float) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info_csrgemm2) -> IO ((Int))
scsrgemm2_bufferSizeExt a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 =
  let {a1' = useHandle a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = castPtr a5} in 
  let {a6' = useMatDescr a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useMatDescr a10} in 
  let {a11' = fromIntegral a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = castPtr a14} in 
  let {a15' = useMatDescr a15} in 
  let {a16' = fromIntegral a16} in 
  let {a17' = useDevP a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = useInfo_csrgemm2 a19} in 
  alloca $ \a20' -> 
  scsrgemm2_bufferSizeExt'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' >>= \res ->
  checkStatus res >> 
  peekIntConv  a20'>>= \a20'' -> 
  return (a20'')

{-# LINE 243 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE dcsrgemm2_bufferSizeExt #-}
dcsrgemm2_bufferSizeExt :: (Handle) -> (Int) -> (Int) -> (Int) -> (Ptr Double) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Ptr Double) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info_csrgemm2) -> IO ((Int))
dcsrgemm2_bufferSizeExt a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 =
  let {a1' = useHandle a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = castPtr a5} in 
  let {a6' = useMatDescr a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useMatDescr a10} in 
  let {a11' = fromIntegral a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = castPtr a14} in 
  let {a15' = useMatDescr a15} in 
  let {a16' = fromIntegral a16} in 
  let {a17' = useDevP a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = useInfo_csrgemm2 a19} in 
  alloca $ \a20' -> 
  dcsrgemm2_bufferSizeExt'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' >>= \res ->
  checkStatus res >> 
  peekIntConv  a20'>>= \a20'' -> 
  return (a20'')

{-# LINE 246 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE ccsrgemm2_bufferSizeExt #-}
ccsrgemm2_bufferSizeExt :: (Handle) -> (Int) -> (Int) -> (Int) -> (Ptr (Complex Float)) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Ptr (Complex Float)) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info_csrgemm2) -> IO ((Int))
ccsrgemm2_bufferSizeExt a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 =
  let {a1' = useHandle a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = castPtr a5} in 
  let {a6' = useMatDescr a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useMatDescr a10} in 
  let {a11' = fromIntegral a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = castPtr a14} in 
  let {a15' = useMatDescr a15} in 
  let {a16' = fromIntegral a16} in 
  let {a17' = useDevP a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = useInfo_csrgemm2 a19} in 
  alloca $ \a20' -> 
  ccsrgemm2_bufferSizeExt'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' >>= \res ->
  checkStatus res >> 
  peekIntConv  a20'>>= \a20'' -> 
  return (a20'')

{-# LINE 249 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE zcsrgemm2_bufferSizeExt #-}
zcsrgemm2_bufferSizeExt :: (Handle) -> (Int) -> (Int) -> (Int) -> (Ptr (Complex Double)) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Ptr (Complex Double)) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info_csrgemm2) -> IO ((Int))
zcsrgemm2_bufferSizeExt a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 =
  let {a1' = useHandle a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = castPtr a5} in 
  let {a6' = useMatDescr a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useMatDescr a10} in 
  let {a11' = fromIntegral a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = castPtr a14} in 
  let {a15' = useMatDescr a15} in 
  let {a16' = fromIntegral a16} in 
  let {a17' = useDevP a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = useInfo_csrgemm2 a19} in 
  alloca $ \a20' -> 
  zcsrgemm2_bufferSizeExt'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' >>= \res ->
  checkStatus res >> 
  peekIntConv  a20'>>= \a20'' -> 
  return (a20'')

{-# LINE 252 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE xcsrgemm2Nnz #-}
xcsrgemm2Nnz :: (Handle) -> (Int) -> (Int) -> (Int) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr Int32) -> (Ptr Int32) -> (Info_csrgemm2) -> (DevicePtr ()) -> IO ()
xcsrgemm2Nnz a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 =
  let {a1' = useHandle a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = useMatDescr a5} in 
  let {a6' = fromIntegral a6} in 
  let {a7' = useDevP a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useMatDescr a9} in 
  let {a10' = fromIntegral a10} in 
  let {a11' = useDevP a11} in 
  let {a12' = useDevP a12} in 
  let {a13' = useMatDescr a13} in 
  let {a14' = fromIntegral a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = useDevP a16} in 
  let {a17' = useMatDescr a17} in 
  let {a18' = useDevP a18} in 
  let {a19' = castPtr a19} in 
  let {a20' = useInfo_csrgemm2 a20} in 
  let {a21' = useDevP a21} in 
  xcsrgemm2Nnz'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' a21' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 255 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE scsrgemm2 #-}
scsrgemm2 :: (Handle) -> (Int) -> (Int) -> (Int) -> (Ptr Float) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Ptr Float) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr Float) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info_csrgemm2) -> (DevicePtr ()) -> IO ()
scsrgemm2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26 a27 =
  let {a1' = useHandle a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = castPtr a5} in 
  let {a6' = useMatDescr a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useMatDescr a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = useDevP a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = castPtr a16} in 
  let {a17' = useMatDescr a17} in 
  let {a18' = fromIntegral a18} in 
  let {a19' = useDevP a19} in 
  let {a20' = useDevP a20} in 
  let {a21' = useDevP a21} in 
  let {a22' = useMatDescr a22} in 
  let {a23' = useDevP a23} in 
  let {a24' = useDevP a24} in 
  let {a25' = useDevP a25} in 
  let {a26' = useInfo_csrgemm2 a26} in 
  let {a27' = useDevP a27} in 
  scsrgemm2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' a21' a22' a23' a24' a25' a26' a27' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 258 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE dcsrgemm2 #-}
dcsrgemm2 :: (Handle) -> (Int) -> (Int) -> (Int) -> (Ptr Double) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Ptr Double) -> (MatrixDescriptor) -> (Int) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr Double) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info_csrgemm2) -> (DevicePtr ()) -> IO ()
dcsrgemm2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26 a27 =
  let {a1' = useHandle a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = castPtr a5} in 
  let {a6' = useMatDescr a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useMatDescr a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = useDevP a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = castPtr a16} in 
  let {a17' = useMatDescr a17} in 
  let {a18' = fromIntegral a18} in 
  let {a19' = useDevP a19} in 
  let {a20' = useDevP a20} in 
  let {a21' = useDevP a21} in 
  let {a22' = useMatDescr a22} in 
  let {a23' = useDevP a23} in 
  let {a24' = useDevP a24} in 
  let {a25' = useDevP a25} in 
  let {a26' = useInfo_csrgemm2 a26} in 
  let {a27' = useDevP a27} in 
  dcsrgemm2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' a21' a22' a23' a24' a25' a26' a27' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 261 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE ccsrgemm2 #-}
ccsrgemm2 :: (Handle) -> (Int) -> (Int) -> (Int) -> (Ptr (Complex Float)) -> (MatrixDescriptor) -> (Int) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Ptr (Complex Float)) -> (MatrixDescriptor) -> (Int) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr (Complex Float)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info_csrgemm2) -> (DevicePtr ()) -> IO ()
ccsrgemm2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26 a27 =
  let {a1' = useHandle a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = castPtr a5} in 
  let {a6' = useMatDescr a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useMatDescr a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = useDevP a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = castPtr a16} in 
  let {a17' = useMatDescr a17} in 
  let {a18' = fromIntegral a18} in 
  let {a19' = useDevP a19} in 
  let {a20' = useDevP a20} in 
  let {a21' = useDevP a21} in 
  let {a22' = useMatDescr a22} in 
  let {a23' = useDevP a23} in 
  let {a24' = useDevP a24} in 
  let {a25' = useDevP a25} in 
  let {a26' = useInfo_csrgemm2 a26} in 
  let {a27' = useDevP a27} in 
  ccsrgemm2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' a21' a22' a23' a24' a25' a26' a27' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 264 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


{-# INLINEABLE zcsrgemm2 #-}
zcsrgemm2 :: (Handle) -> (Int) -> (Int) -> (Int) -> (Ptr (Complex Double)) -> (MatrixDescriptor) -> (Int) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (Int) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Ptr (Complex Double)) -> (MatrixDescriptor) -> (Int) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (MatrixDescriptor) -> (DevicePtr (Complex Double)) -> (DevicePtr Int32) -> (DevicePtr Int32) -> (Info_csrgemm2) -> (DevicePtr ()) -> IO ()
zcsrgemm2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26 a27 =
  let {a1' = useHandle a1} in 
  let {a2' = fromIntegral a2} in 
  let {a3' = fromIntegral a3} in 
  let {a4' = fromIntegral a4} in 
  let {a5' = castPtr a5} in 
  let {a6' = useMatDescr a6} in 
  let {a7' = fromIntegral a7} in 
  let {a8' = useDevP a8} in 
  let {a9' = useDevP a9} in 
  let {a10' = useDevP a10} in 
  let {a11' = useMatDescr a11} in 
  let {a12' = fromIntegral a12} in 
  let {a13' = useDevP a13} in 
  let {a14' = useDevP a14} in 
  let {a15' = useDevP a15} in 
  let {a16' = castPtr a16} in 
  let {a17' = useMatDescr a17} in 
  let {a18' = fromIntegral a18} in 
  let {a19' = useDevP a19} in 
  let {a20' = useDevP a20} in 
  let {a21' = useDevP a21} in 
  let {a22' = useMatDescr a22} in 
  let {a23' = useDevP a23} in 
  let {a24' = useDevP a24} in 
  let {a25' = useDevP a25} in 
  let {a26' = useInfo_csrgemm2 a26} in 
  let {a27' = useDevP a27} in 
  zcsrgemm2'_ a1' a2' a3' a4' a5' a6' a7' a8' a9' a10' a11' a12' a13' a14' a15' a16' a17' a18' a19' a20' a21' a22' a23' a24' a25' a26' a27' >>= \res ->
  checkStatus res >> 
  return ()

{-# LINE 296 "./Foreign/CUDA/BLAS/Sparse/Level3.chs" #-}


foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseScsrmm"
  scsrmm'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> (C2HSImp.CInt -> (IO C2HSImp.CInt)))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseDcsrmm"
  dcsrmm'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CInt -> (IO C2HSImp.CInt)))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseCcsrmm"
  ccsrmm'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (IO C2HSImp.CInt)))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseZcsrmm"
  zcsrmm'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (IO C2HSImp.CInt)))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseScsrmm2"
  scsrmm2'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> (C2HSImp.CInt -> (IO C2HSImp.CInt))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseDcsrmm2"
  dcsrmm2'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CInt -> (IO C2HSImp.CInt))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseCcsrmm2"
  ccsrmm2'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (IO C2HSImp.CInt))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseZcsrmm2"
  zcsrmm2'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (IO C2HSImp.CInt))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseScsrsm_analysis"
  scsrsm_analysis'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseDcsrsm_analysis"
  dcsrsm_analysis'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseCcsrsm_analysis"
  ccsrsm_analysis'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseZcsrsm_analysis"
  zcsrsm_analysis'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseScsrsm_solve"
  scsrsm_solve'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> (C2HSImp.CInt -> (IO C2HSImp.CInt)))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseDcsrsm_solve"
  dcsrsm_solve'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CInt -> (IO C2HSImp.CInt)))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseCcsrsm_solve"
  ccsrsm_solve'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (IO C2HSImp.CInt)))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseZcsrsm_solve"
  zcsrsm_solve'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (IO C2HSImp.CInt)))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseSbsrmm"
  sbsrmm'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> (C2HSImp.CInt -> (IO C2HSImp.CInt))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseDbsrmm"
  dbsrmm'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CInt -> (IO C2HSImp.CInt))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseCbsrmm"
  cbsrmm'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (IO C2HSImp.CInt))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseZbsrmm"
  zbsrmm'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (IO C2HSImp.CInt))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseSbsrsm2_bufferSize"
  sbsrsm2_bufferSize'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt)))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseDbsrsm2_bufferSize"
  dbsrsm2_bufferSize'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt)))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseCbsrsm2_bufferSize"
  cbsrsm2_bufferSize'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt)))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseZbsrsm2_bufferSize"
  zbsrsm2_bufferSize'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt)))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseSbsrsm2_analysis"
  sbsrsm2_analysis'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseDbsrsm2_analysis"
  dbsrsm2_analysis'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseCbsrsm2_analysis"
  cbsrsm2_analysis'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseZbsrsm2_analysis"
  zbsrsm2_analysis'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseSbsrsm2_solve"
  sbsrsm2_solve'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt)))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseDbsrsm2_solve"
  dbsrsm2_solve'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt)))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseCbsrsm2_solve"
  cbsrsm2_solve'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt)))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseZbsrsm2_solve"
  zbsrsm2_solve'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt)))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseXbsrsm2_zeroPivot"
  xbsrsm2_zeroPivot'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseXcsrgeamNnz"
  xcsrgeamNnz'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt)))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseScsrgeam"
  scsrgeam'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseDcsrgeam"
  dcsrgeam'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseCcsrgeam"
  ccsrgeam'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseZcsrgeam"
  zcsrgeam'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseXcsrgemmNnz"
  xcsrgemmNnz'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseScsrgemm"
  scsrgemm'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt)))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseDcsrgemm"
  dcsrgemm'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt)))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseCcsrgemm"
  ccsrgemm'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt)))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseZcsrgemm"
  zcsrgemm'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> (IO C2HSImp.CInt)))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseScsrgemm2_bufferSizeExt"
  scsrgemm2_bufferSizeExt'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CULong) -> (IO C2HSImp.CInt)))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseDcsrgemm2_bufferSizeExt"
  dcsrgemm2_bufferSizeExt'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CULong) -> (IO C2HSImp.CInt)))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseCcsrgemm2_bufferSizeExt"
  ccsrgemm2_bufferSizeExt'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CULong) -> (IO C2HSImp.CInt)))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseZcsrgemm2_bufferSizeExt"
  zcsrgemm2_bufferSizeExt'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CULong) -> (IO C2HSImp.CInt)))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseXcsrgemm2Nnz"
  xcsrgemm2Nnz'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseScsrgemm2"
  scsrgemm2'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CFloat) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))))))))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseDcsrgemm2"
  dcsrgemm2'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))))))))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseCcsrgemm2"
  ccsrgemm2'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))))))))))))))))))))))))))

foreign import ccall unsafe "Foreign/CUDA/BLAS/Sparse/Level3.chs.h cusparseZcsrgemm2"
  zcsrgemm2'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))))))))))))))))))))))))))