!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Copyright (C) 2020 Advanced Micro Devices, Inc. All rights Reserved.
!
! Permission is hereby granted, free of charge, to any person obtaining a copy
! of this software and associated documentation files (the "Software"), to deal
! in the Software without restriction, including without limitation the rights
! to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
! copies of the Software, and to permit persons to whom the Software is
! furnished to do so, subject to the following conditions:
!
! The above copyright notice and this permission notice shall be included in
! all copies or substantial portions of the Software.
!
! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
! IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
! FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
! AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
! LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
! OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
! THE SOFTWARE.
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

module hipsparse
    use hipsparse_enums
    use iso_c_binding
    implicit none

! ===========================================================================
!   auxiliary SPARSE
! ===========================================================================

    interface

!       hipsparseHandle_t
        function hipsparseCreate(handle) &
                bind(c, name = 'hipsparseCreate')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCreate
            type(c_ptr) :: handle
        end function hipsparseCreate

        function hipsparseDestroy(handle) &
                bind(c, name = 'hipsparseDestroy')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDestroy
            type(c_ptr), value :: handle
        end function hipsparseDestroy

!       hipsparseVersion
        function hipsparseGetVersion(handle, version) &
                bind(c, name = 'hipsparseGetVersion')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseGetVersion
            type(c_ptr), value :: handle
            integer(c_int) :: version
        end function hipsparseGetVersion

!       hipsparseStream
        function hipsparseSetStream(handle, stream) &
                bind(c, name = 'hipsparseSetStream')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSetStream
            type(c_ptr), value :: handle
            type(c_ptr), value :: stream
        end function hipsparseSetStream

        function hipsparseGetStream(handle, stream) &
                bind(c, name = 'hipsparseGetStream')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseGetStream
            type(c_ptr), value :: handle
            type(c_ptr) :: stream
        end function hipsparseGetStream

!       hipsparsePointerMode_t
        function hipsparseSetPointerMode(handle, mode) &
                bind(c, name = 'hipsparseSetPointerMode')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSetPointerMode
            type(c_ptr), value :: handle
            integer(c_int), value :: mode
        end function hipsparseSetPointerMode

        function hipsparseGetPointerMode(handle, mode) &
                bind(c, name = 'hipsparseGetPointerMode')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseGetPointerMode
            type(c_ptr), value :: handle
            integer(c_int) :: mode
        end function hipsparseGetPointerMode

!       hipsparseMatDescr_t
        function hipsparseCreateMatDescr(descr) &
                bind(c, name = 'hipsparseCreateMatDescr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCreateMatDescr
            type(c_ptr) :: descr
        end function hipsparseCreateMatDescr

        function hipsparseDestroyMatDescr(descr) &
                bind(c, name = 'hipsparseDestroyMatDescr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDestroyMatDescr
            type(c_ptr), value :: descr
        end function hipsparseDestroyMatDescr

        function hipsparseCopyMatDescr(dest, src) &
                bind(c, name = 'hipsparseCopyMatDescr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCopyMatDescr
            type(c_ptr), value :: dest
            type(c_ptr), intent(in), value :: src
        end function hipsparseCopyMatDescr

!       hipsparseMatrixType_t
        function hipsparseSetMatType(descr, mtype) &
                bind(c, name = 'hipsparseSetMatType')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSetMatType
            type(c_ptr), value :: descr
            integer(c_int), value :: mtype
        end function hipsparseSetMatType

        function hipsparseGetMatType(descr) &
                bind(c, name = 'hipsparseGetMatType')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseGetMatType
            type(c_ptr), intent(in), value :: descr
        end function hipsparseGetMatType

!       hipsparseFillMode_t
        function hipsparseSetMatFillMode(descr, fill) &
                bind(c, name = 'hipsparseSetMatFillMode')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSetMatFillMode
            type(c_ptr), value :: descr
            integer(c_int), value :: fill
        end function hipsparseSetMatFillMode

        function hipsparseGetMatFillMode(descr) &
                bind(c, name = 'hipsparseGetMatFillMode')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseGetMatFillMode
            type(c_ptr), intent(in), value :: descr
        end function hipsparseGetMatFillMode

!       hipsparseDiagType_t
        function hipsparseSetMatDiagType(descr, diag) &
                bind(c, name = 'hipsparseSetMatDiagType')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSetMatDiagType
            type(c_ptr), value :: descr
            integer(c_int), value :: diag
        end function hipsparseSetMatDiagType

        function hipsparseGetMatDiagType(descr) &
                bind(c, name = 'hipsparseGetMatDiagType')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseGetMatDiagType
            type(c_ptr), intent(in), value :: descr
        end function hipsparseGetMatDiagType

!       hipsparseIndexBase_t
        function hipsparseSetMatIndexBase(descr, base) &
                bind(c, name = 'hipsparseSetMatIndexBase')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSetMatIndexBase
            type(c_ptr), value :: descr
            integer(c_int), value :: base
        end function hipsparseSetMatIndexBase

        function hipsparseGetMatIndexBase(descr) &
                bind(c, name = 'hipsparseGetMatIndexBase')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseGetMatIndexBase
            type(c_ptr), intent(in), value :: descr
        end function hipsparseGetMatIndexBase

!       hipsparseHybMat_t
        function hipsparseCreateHybMat(hyb) &
                bind(c, name = 'hipsparseCreateHybMat')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCreateHybMat
            type(c_ptr) :: hyb
        end function hipsparseCreateHybMat

        function hipsparseDestroyHybMat(hyb) &
                bind(c, name = 'hipsparseDestroyHybMat')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDestroyHybMat
            type(c_ptr), value :: hyb
        end function hipsparseDestroyHybMat

!       csrsv2Info_t
        function hipsparseCreateCsrsv2Info(info) &
                bind(c, name = 'hipsparseCreateCsrsv2Info')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCreateCsrsv2Info
            type(c_ptr) :: info
        end function hipsparseCreateCsrsv2Info

        function hipsparseDestroyCsrsv2Info(info) &
                bind(c, name = 'hipsparseDestroyCsrsv2Info')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDestroyCsrsv2Info
            type(c_ptr), value :: info
        end function hipsparseDestroyCsrsv2Info

!       csrsm2Info_t
        function hipsparseCreateCsrsm2Info(info) &
                bind(c, name = 'hipsparseCreateCsrsm2Info')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCreateCsrsm2Info
            type(c_ptr) :: info
        end function hipsparseCreateCsrsm2Info

        function hipsparseDestroyCsrsm2Info(info) &
                bind(c, name = 'hipsparseDestroyCsrsm2Info')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDestroyCsrsm2Info
            type(c_ptr), value :: info
        end function hipsparseDestroyCsrsm2Info

!       bsrilu02Info_t
        function hipsparseCreateBsrilu02Info(info) &
                bind(c, name = 'hipsparseCreateBsrilu02Info')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCreateBsrilu02Info
            type(c_ptr) :: info
        end function hipsparseCreateBsrilu02Info

        function hipsparseDestroyBsrilu02Info(info) &
                bind(c, name = 'hipsparseDestroyBsrilu02Info')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDestroyBsrilu02Info
            type(c_ptr), value :: info
        end function hipsparseDestroyBsrilu02Info

!       csrilu02Info_t
        function hipsparseCreateCsrilu02Info(info) &
                bind(c, name = 'hipsparseCreateCsrilu02Info')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCreateCsrilu02Info
            type(c_ptr) :: info
        end function hipsparseCreateCsrilu02Info

        function hipsparseDestroyCsrilu02Info(info) &
                bind(c, name = 'hipsparseDestroyCsrilu02Info')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDestroyCsrilu02Info
            type(c_ptr), value :: info
        end function hipsparseDestroyCsrilu02Info

!       bsric02Info_t
        function hipsparseCreateBsric02Info(info) &
                bind(c, name = 'hipsparseCreateBsric02Info')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCreateBsric02Info
            type(c_ptr) :: info
        end function hipsparseCreateBsric02Info

        function hipsparseDestroyBsric02Info(info) &
                bind(c, name = 'hipsparseDestroyBsric02Info')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDestroyBsric02Info
            type(c_ptr), value :: info
        end function hipsparseDestroyBsric02Info

!       csric02Info_t
        function hipsparseCreateCsric02Info(info) &
                bind(c, name = 'hipsparseCreateCsric02Info')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCreateCsric02Info
            type(c_ptr) :: info
        end function hipsparseCreateCsric02Info

        function hipsparseDestroyCsric02Info(info) &
                bind(c, name = 'hipsparseDestroyCsric02Info')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDestroyCsric02Info
            type(c_ptr), value :: info
        end function hipsparseDestroyCsric02Info

!       csrgemm2Info_t
        function hipsparseCreateCsrgemm2Info(info) &
                bind(c, name = 'hipsparseCreateCsrgemm2Info')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCreateCsrgemm2Info
            type(c_ptr) :: info
        end function hipsparseCreateCsrgemm2Info

        function hipsparseDestroyCsrgemm2Info(info) &
                bind(c, name = 'hipsparseDestroyCsrgemm2Info')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDestroyCsrgemm2Info
            type(c_ptr), value :: info
        end function hipsparseDestroyCsrgemm2Info

! ===========================================================================
!   level 1 SPARSE
! ===========================================================================

!       hipsparseXaxpyi
        function hipsparseSaxpyi(handle, nnz, alpha, xVal, xInd, y, idxBase) &
                bind(c, name = 'hipsparseSaxpyi')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSaxpyi
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), value :: y
            integer(c_int), value :: idxBase
        end function hipsparseSaxpyi

        function hipsparseDaxpyi(handle, nnz, alpha, xVal, xInd, y, idxBase) &
                bind(c, name = 'hipsparseDaxpyi')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDaxpyi
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), value :: y
            integer(c_int), value :: idxBase
        end function hipsparseDaxpyi

        function hipsparseCaxpyi(handle, nnz, alpha, xVal, xInd, y, idxBase) &
                bind(c, name = 'hipsparseCaxpyi')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCaxpyi
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), value :: y
            integer(c_int), value :: idxBase
        end function hipsparseCaxpyi

        function hipsparseZaxpyi(handle, nnz, alpha, xVal, xInd, y, idxBase) &
                bind(c, name = 'hipsparseZaxpyi')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZaxpyi
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), value :: y
            integer(c_int), value :: idxBase
        end function hipsparseZaxpyi

!       hipsparseXdoti
        function hipsparseSdoti(handle, nnz, xVal, xInd, y, result, idxBase) &
                bind(c, name = 'hipsparseSdoti')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSdoti
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), intent(in), value :: y
            type(c_ptr), value :: result
            integer(c_int), value :: idxBase
        end function hipsparseSdoti

        function hipsparseDdoti(handle, nnz, xVal, xInd, y, result, idxBase) &
                bind(c, name = 'hipsparseDdoti')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDdoti
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), intent(in), value :: y
            type(c_ptr), value :: result
            integer(c_int), value :: idxBase
        end function hipsparseDdoti

        function hipsparseCdoti(handle, nnz, xVal, xInd, y, result, idxBase) &
                bind(c, name = 'hipsparseCdoti')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCdoti
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), intent(in), value :: y
            type(c_ptr), value :: result
            integer(c_int), value :: idxBase
        end function hipsparseCdoti

        function hipsparseZdoti(handle, nnz, xVal, xInd, y, result, idxBase) &
                bind(c, name = 'hipsparseZdoti')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZdoti
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), intent(in), value :: y
            type(c_ptr), value :: result
            integer(c_int), value :: idxBase
        end function hipsparseZdoti

!       hipsparseXdotci
        function hipsparseCdotci(handle, nnz, xVal, xInd, y, result, idxBase) &
                bind(c, name = 'hipsparseCdotci')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCdotci
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), intent(in), value :: y
            type(c_ptr), value :: result
            integer(c_int), value :: idxBase
        end function hipsparseCdotci

        function hipsparseZdotci(handle, nnz, xVal, xInd, y, result, idxBase) &
                bind(c, name = 'hipsparseZdotci')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZdotci
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), intent(in), value :: y
            type(c_ptr), value :: result
            integer(c_int), value :: idxBase
        end function hipsparseZdotci

!       hipsparseXgthr
        function hipsparseSgthr(handle, nnz, y, xVal, xInd, idxBase) &
                bind(c, name = 'hipsparseSgthr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSgthr
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: y
            type(c_ptr), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            integer(c_int), value :: idxBase
        end function hipsparseSgthr

        function hipsparseDgthr(handle, nnz, y, xVal, xInd, idxBase) &
                bind(c, name = 'hipsparseDgthr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDgthr
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: y
            type(c_ptr), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            integer(c_int), value :: idxBase
        end function hipsparseDgthr

        function hipsparseCgthr(handle, nnz, y, xVal, xInd, idxBase) &
                bind(c, name = 'hipsparseCgthr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCgthr
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: y
            type(c_ptr), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            integer(c_int), value :: idxBase
        end function hipsparseCgthr

        function hipsparseZgthr(handle, nnz, y, xVal, xInd, idxBase) &
                bind(c, name = 'hipsparseZgthr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZgthr
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: y
            type(c_ptr), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            integer(c_int), value :: idxBase
        end function hipsparseZgthr

!       hipsparseXgthrz
        function hipsparseSgthrz(handle, nnz, y, xVal, xInd, idxBase) &
                bind(c, name = 'hipsparseSgthrz')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSgthrz
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), value :: y
            type(c_ptr), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            integer(c_int), value :: idxBase
        end function hipsparseSgthrz

        function hipsparseDgthrz(handle, nnz, y, xVal, xInd, idxBase) &
                bind(c, name = 'hipsparseDgthrz')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDgthrz
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), value :: y
            type(c_ptr), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            integer(c_int), value :: idxBase
        end function hipsparseDgthrz

        function hipsparseCgthrz(handle, nnz, y, xVal, xInd, idxBase) &
                bind(c, name = 'hipsparseCgthrz')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCgthrz
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), value :: y
            type(c_ptr), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            integer(c_int), value :: idxBase
        end function hipsparseCgthrz

        function hipsparseZgthrz(handle, nnz, y, xVal, xInd, idxBase) &
                bind(c, name = 'hipsparseZgthrz')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZgthrz
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), value :: y
            type(c_ptr), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            integer(c_int), value :: idxBase
        end function hipsparseZgthrz

!       hipsparseXroti
        function hipsparseSroti(handle, nnz, xVal, xInd, y, c, s, idxBase) &
                bind(c, name = 'hipsparseSroti')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSroti
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), value :: y
            type(c_ptr), intent(in), value :: c
            type(c_ptr), intent(in), value :: s
            integer(c_int), value :: idxBase
        end function hipsparseSroti

        function hipsparseDroti(handle, nnz, xVal, xInd, y, c, s, idxBase) &
                bind(c, name = 'hipsparseDroti')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDroti
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), value :: y
            type(c_ptr), intent(in), value :: c
            type(c_ptr), intent(in), value :: s
            integer(c_int), value :: idxBase
        end function hipsparseDroti

!       hipsparseXsctr
        function hipsparseSsctr(handle, nnz, xVal, xInd, y, idxBase) &
                bind(c, name = 'hipsparseSsctr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSsctr
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), value :: y
            integer(c_int), value :: idxBase
        end function hipsparseSsctr

        function hipsparseDsctr(handle, nnz, xVal, xInd, y, idxBase) &
                bind(c, name = 'hipsparseDsctr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDsctr
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), value :: y
            integer(c_int), value :: idxBase
        end function hipsparseDsctr

        function hipsparseCsctr(handle, nnz, xVal, xInd, y, idxBase) &
                bind(c, name = 'hipsparseCsctr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCsctr
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), value :: y
            integer(c_int), value :: idxBase
        end function hipsparseCsctr

        function hipsparseZsctr(handle, nnz, xVal, xInd, y, idxBase) &
                bind(c, name = 'hipsparseZsctr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZsctr
            type(c_ptr), value :: handle
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: xVal
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), value :: y
            integer(c_int), value :: idxBase
        end function hipsparseZsctr

! ===========================================================================
!   level 2 SPARSE
! ===========================================================================

!       hipsparseXcsrmv
        function hipsparseScsrmv(handle, trans, m, n, nnz, alpha, descr, csrVal, &
                csrRowPtr, csrColInd, x, beta, y) &
                bind(c, name = 'hipsparseScsrmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrmv
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseScsrmv

        function hipsparseDcsrmv(handle, trans, m, n, nnz, alpha, descr, csrVal, &
                csrRowPtr, csrColInd, x, beta, y) &
                bind(c, name = 'hipsparseDcsrmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrmv
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseDcsrmv

        function hipsparseCcsrmv(handle, trans, m, n, nnz, alpha, descr, csrVal, &
                csrRowPtr, csrColInd, x, beta, y) &
                bind(c, name = 'hipsparseCcsrmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrmv
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseCcsrmv

        function hipsparseZcsrmv(handle, trans, m, n, nnz, alpha, descr, csrVal, &
                csrRowPtr, csrColInd, x, beta, y) &
                bind(c, name = 'hipsparseZcsrmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrmv
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseZcsrmv

!       hipsparseXcsrsv2_zeroPivot
        function hipsparseXcsrsv2_zeroPivot(handle, info, position) &
                bind(c, name = 'hipsparseXcsrsv2_zeroPivot')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcsrsv2_zeroPivot
            type(c_ptr), value :: handle
            type(c_ptr), value :: info
            type(c_ptr), value :: position
        end function hipsparseXcsrsv2_zeroPivot

!       hipsparseXcsrsv2_bufferSize
        function hipsparseScsrsv2_bufferSize(handle, trans, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseScsrsv2_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrsv2_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseScsrsv2_bufferSize

        function hipsparseDcsrsv2_bufferSize(handle, trans, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseDcsrsv2_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrsv2_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseDcsrsv2_bufferSize

        function hipsparseCcsrsv2_bufferSize(handle, trans, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseCcsrsv2_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrsv2_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseCcsrsv2_bufferSize

        function hipsparseZcsrsv2_bufferSize(handle, trans, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseZcsrsv2_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrsv2_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseZcsrsv2_bufferSize

!       hipsparseXcsrsv2_bufferSizeExt
        function hipsparseScsrsv2_bufferSizeExt(handle, trans, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseScsrsv2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrsv2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseScsrsv2_bufferSizeExt

        function hipsparseDcsrsv2_bufferSizeExt(handle, trans, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseDcsrsv2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrsv2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseDcsrsv2_bufferSizeExt

        function hipsparseCcsrsv2_bufferSizeExt(handle, trans, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseCcsrsv2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrsv2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseCcsrsv2_bufferSizeExt

        function hipsparseZcsrsv2_bufferSizeExt(handle, trans, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseZcsrsv2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrsv2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseZcsrsv2_bufferSizeExt

!       hipsparseXcsrsv2_analysis
        function hipsparseScsrsv2_analysis(handle, trans, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseScsrsv2_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrsv2_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseScsrsv2_analysis

        function hipsparseDcsrsv2_analysis(handle, trans, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseDcsrsv2_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrsv2_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseDcsrsv2_analysis

        function hipsparseCcsrsv2_analysis(handle, trans, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseCcsrsv2_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrsv2_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseCcsrsv2_analysis

        function hipsparseZcsrsv2_analysis(handle, trans, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseZcsrsv2_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrsv2_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseZcsrsv2_analysis

!       hipsparseXcsrsv2_solve
        function hipsparseScsrsv2_solve(handle, trans, m, nnz, alpha, descr, csrVal, &
                csrRowPtr, csrColInd, info, x, y, policy, buffer) &
                bind(c, name = 'hipsparseScsrsv2_solve')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrsv2_solve
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), intent(in), value :: x
            type(c_ptr), value :: y
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseScsrsv2_solve

        function hipsparseDcsrsv2_solve(handle, trans, m, nnz, alpha, descr, csrVal, &
                csrRowPtr, csrColInd, info, x, y, policy, buffer) &
                bind(c, name = 'hipsparseDcsrsv2_solve')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrsv2_solve
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), intent(in), value :: x
            type(c_ptr), value :: y
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseDcsrsv2_solve

        function hipsparseCcsrsv2_solve(handle, trans, m, nnz, alpha, descr, csrVal, &
                csrRowPtr, csrColInd, info, x, y, policy, buffer) &
                bind(c, name = 'hipsparseCcsrsv2_solve')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrsv2_solve
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), intent(in), value :: x
            type(c_ptr), value :: y
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseCcsrsv2_solve

        function hipsparseZcsrsv2_solve(handle, trans, m, nnz, alpha, descr, csrVal, &
                csrRowPtr, csrColInd, info, x, y, policy, buffer) &
                bind(c, name = 'hipsparseZcsrsv2_solve')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrsv2_solve
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), intent(in), value :: x
            type(c_ptr), value :: y
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseZcsrsv2_solve

!       hipsparseXhybmv
        function hipsparseShybmv(handle, trans, alpha, descr, hyb, x, beta, y) &
                bind(c, name = 'hipsparseShybmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseShybmv
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: hyb
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseShybmv

        function hipsparseDhybmv(handle, trans, alpha, descr, hyb, x, beta, y) &
                bind(c, name = 'hipsparseDhybmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDhybmv
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: hyb
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseDhybmv

        function hipsparseChybmv(handle, trans, alpha, descr, hyb, x, beta, y) &
                bind(c, name = 'hipsparseChybmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseChybmv
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: hyb
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseChybmv

        function hipsparseZhybmv(handle, trans, alpha, descr, hyb, x, beta, y) &
                bind(c, name = 'hipsparseZhybmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZhybmv
            type(c_ptr), value :: handle
            integer(c_int), value :: trans
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: hyb
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseZhybmv

!       hipsparseXbsrmv
        function hipsparseSbsrmv(handle, dir, trans, mb, nb, nnzb, alpha, descr, &
                bsrVal, bsrRowPtr, bsrColInd, blockDim, x, beta, y) &
                bind(c, name = 'hipsparseSbsrmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSbsrmv
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: trans
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseSbsrmv

        function hipsparseDbsrmv(handle, dir, trans, mb, nb, nnzb, alpha, descr, &
                bsrVal, bsrRowPtr, bsrColInd, blockDim, x, beta, y) &
                bind(c, name = 'hipsparseDbsrmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDbsrmv
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: trans
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseDbsrmv

        function hipsparseCbsrmv(handle, dir, trans, mb, nb, nnzb, alpha, descr, &
                bsrVal, bsrRowPtr, bsrColInd, blockDim, x, beta, y) &
                bind(c, name = 'hipsparseCbsrmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCbsrmv
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: trans
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseCbsrmv

        function hipsparseZbsrmv(handle, dir, trans, mb, nb, nnzb, alpha, descr, &
                bsrVal, bsrRowPtr, bsrColInd, blockDim, x, beta, y) &
                bind(c, name = 'hipsparseZbsrmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZbsrmv
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: trans
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseZbsrmv


!       hipsparseXbsrxmv
        function hipsparseSbsrxmv(handle, dir, trans, sizeOfMask, &
                mb, nb, nnzb, alpha, descr, bsrVal, &
                bsrMaskPtr, bsrRowPtr, bsrEndPtr, bsrColInd, blockDim, x, beta, y) &
                bind(c, name = 'hipsparseSbsrxmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSbsrxmv
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: trans
            integer(c_int), value :: sizeOfMask
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrMaskPtr
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrEndPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseSbsrxmv

        function hipsparseDbsrxmv(handle, dir, trans, sizeOfMask, &
                mb, nb, nnzb, alpha, descr, bsrVal, &
                bsrMaskPtr, bsrRowPtr, bsrEndPtr, bsrColInd, blockDim, x, beta, y) &
                bind(c, name = 'hipsparseDbsrxmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDbsrxmv
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: trans
            integer(c_int), value :: sizeOfMask
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrMaskPtr
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrEndPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseDbsrxmv

        function hipsparseCbsrxmv(handle, dir, trans, sizeOfMask, &
                mb, nb, nnzb, alpha, descr, bsrVal, &
                bsrMaskPtr, bsrRowPtr, bsrEndPtr, bsrColInd, blockDim, x, beta, y) &
                bind(c, name = 'hipsparseCbsrxmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCbsrxmv
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: trans
            integer(c_int), value :: sizeOfMask
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrMaskPtr
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrEndPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseCbsrxmv
      
        function hipsparseZbsrxmv(handle, dir, trans, sizeOfMask, &
                mb, nb, nnzb, alpha, descr, bsrVal, &
                bsrMaskPtr, bsrRowPtr, bsrEndPtr, bsrColInd, blockDim, x, beta, y) &
                bind(c, name = 'hipsparseZbsrxmv')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZbsrxmv
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: trans
            integer(c_int), value :: sizeOfMask
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrMaskPtr
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrEndPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
        end function hipsparseZbsrxmv
      
        function hipsparseSgemvi_bufferSize(handle, transA, m, n, nnz, pBufferSizeInBytes) &
                bind(c, name = 'hipsparseSgemvi_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSgemvi_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), value :: pBufferSizeInBytes
        end function hipsparseSgemvi_bufferSize

        function hipsparseDgemvi_bufferSize(handle, transA, m, n, nnz, pBufferSizeInBytes) &
                bind(c, name = 'hipsparseDgemvi_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDgemvi_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), value :: pBufferSizeInBytes
        end function hipsparseDgemvi_bufferSize

        function hipsparseCgemvi_bufferSize(handle, transA, m, n, nnz, pBufferSizeInBytes) &
                bind(c, name = 'hipsparseCgemvi_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCgemvi_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), value :: pBufferSizeInBytes
        end function hipsparseCgemvi_bufferSize

        function hipsparseZgemvi_bufferSize(handle, transA, m, n, nnz, pBufferSizeInBytes) &
                bind(c, name = 'hipsparseZgemvi_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZgemvi_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), value :: pBufferSizeInBytes
        end function hipsparseZgemvi_bufferSize

        function hipsparseSgemvi(handle, transA, m, n, alpha, A, lda, nnz, x, xInd, &
                beta, y, idxBase, pBuffer) &
                bind(c, name = 'hipsparseSgemvi')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSgemvi
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
            integer(c_int), value :: idxBase
            type(c_ptr), value :: pBuffer
        end function hipsparseSgemvi

        function hipsparseDgemvi(handle, transA, m, n, alpha, A, lda, nnz, x, xInd, &
                beta, y, idxBase, pBuffer) &
                bind(c, name = 'hipsparseDgemvi')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDgemvi
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
            integer(c_int), value :: idxBase
            type(c_ptr), value :: pBuffer
        end function hipsparseDgemvi

        function hipsparseCgemvi(handle, transA, m, n, alpha, A, lda, nnz, x, xInd, &
                beta, y, idxBase, pBuffer) &
                bind(c, name = 'hipsparseCgemvi')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCgemvi
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
            integer(c_int), value :: idxBase
            type(c_ptr), value :: pBuffer
        end function hipsparseCgemvi

        function hipsparseZgemvi(handle, transA, m, n, alpha, A, lda, nnz, x, xInd, &
                beta, y, idxBase, pBuffer) &
                bind(c, name = 'hipsparseZgemvi')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZgemvi
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: x
            type(c_ptr), intent(in), value :: xInd
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: y
            integer(c_int), value :: idxBase
            type(c_ptr), value :: pBuffer
        end function hipsparseZgemvi

! ===========================================================================
!   level 3 SPARSE
! ===========================================================================

!       hipsparseXbsrmm
        function hipsparseSbsrmm(handle, dirA, transA, transB, mb, n, kb, nnzb, alpha, descrA, bsrValA, &
                bsrRowPtrA, bsrColIndA, blockDim, B, ldb, beta, C, ldc) &
                bind(c, name = 'hipsparseSbsrmm')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSbsrmm
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: mb
            integer(c_int), value :: n
            integer(c_int), value :: kb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: bsrValA
            type(c_ptr), intent(in), value :: bsrRowPtrA
            type(c_ptr), intent(in), value :: bsrColIndA
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseSbsrmm

        function hipsparseDbsrmm(handle, dirA, transA, transB, mb, n, kb, nnzb, alpha, descrA, bsrValA, &
                bsrRowPtrA, bsrColIndA, blockDim, B, ldb, beta, C, ldc) &
                bind(c, name = 'hipsparseDbsrmm')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDbsrmm
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: mb
            integer(c_int), value :: n
            integer(c_int), value :: kb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: bsrValA
            type(c_ptr), intent(in), value :: bsrRowPtrA
            type(c_ptr), intent(in), value :: bsrColIndA
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseDbsrmm

        function hipsparseCbsrmm(handle, dirA, transA, transB, mb, n, kb, nnzb, alpha, descrA, bsrValA, &
                bsrRowPtrA, bsrColIndA, blockDim, B, ldb, beta, C, ldc) &
                bind(c, name = 'hipsparseCbsrmm')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCbsrmm
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: mb
            integer(c_int), value :: n
            integer(c_int), value :: kb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: bsrValA
            type(c_ptr), intent(in), value :: bsrRowPtrA
            type(c_ptr), intent(in), value :: bsrColIndA
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseCbsrmm

        function hipsparseZbsrmm(handle, dirA, transA, transB, mb, n, kb, nnzb, alpha, descrA, bsrValA, &
                bsrRowPtrA, bsrColIndA, blockDim, B, ldb, beta, C, ldc) &
                bind(c, name = 'hipsparseZbsrmm')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZbsrmm
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: mb
            integer(c_int), value :: n
            integer(c_int), value :: kb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: bsrValA
            type(c_ptr), intent(in), value :: bsrRowPtrA
            type(c_ptr), intent(in), value :: bsrColIndA
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseZbsrmm

!       hipsparseXcsrmm
        function hipsparseScsrmm(handle, transA, m, n, k, nnz, alpha, descrA, csrValA, &
                csrRowPtrA, csrColIndA, B, ldb, beta, C, ldc) &
                bind(c, name = 'hipsparseScsrmm')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrmm
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseScsrmm

        function hipsparseDcsrmm(handle, transA, m, n, k, nnz, alpha, descrA, csrValA, &
                csrRowPtrA, csrColIndA, B, ldb, beta, C, ldc) &
                bind(c, name = 'hipsparseDcsrmm')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrmm
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseDcsrmm

        function hipsparseCcsrmm(handle, transA, m, n, k, nnz, alpha, descrA, csrValA, &
                csrRowPtrA, csrColIndA, B, ldb, beta, C, ldc) &
                bind(c, name = 'hipsparseCcsrmm')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrmm
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseCcsrmm

        function hipsparseZcsrmm(handle, transA, m, n, k, nnz, alpha, descrA, csrValA, &
                csrRowPtrA, csrColIndA, B, ldb, beta, C, ldc) &
                bind(c, name = 'hipsparseZcsrmm')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrmm
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseZcsrmm

!       hipsparseXcsrmm2
        function hipsparseScsrmm2(handle, transA, transB, m, n, k, nnz, alpha, descrA, &
                csrValA, csrRowPtrA, csrColIndA, B, ldb, beta, C, ldc) &
                bind(c, name = 'hipsparseScsrmm2')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrmm2
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseScsrmm2

        function hipsparseDcsrmm2(handle, transA, transB, m, n, k, nnz, alpha, descrA, &
                csrValA, csrRowPtrA, csrColIndA, B, ldb, beta, C, ldc) &
                bind(c, name = 'hipsparseDcsrmm2')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrmm2
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseDcsrmm2

        function hipsparseCcsrmm2(handle, transA, transB, m, n, k, nnz, alpha, descrA, &
                csrValA, csrRowPtrA, csrColIndA, B, ldb, beta, C, ldc) &
                bind(c, name = 'hipsparseCcsrmm2')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrmm2
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseCcsrmm2

        function hipsparseZcsrmm2(handle, transA, transB, m, n, k, nnz, alpha, descrA, &
                csrValA, csrRowPtrA, csrColIndA, B, ldb, beta, C, ldc) &
                bind(c, name = 'hipsparseZcsrmm2')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrmm2
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseZcsrmm2

!       hipsparseXcsrsm2_zeroPivot
        function hipsparseXcsrsm2_zeroPivot(handle, info, position) &
                bind(c, name = 'hipsparseXcsrsm2_zeroPivot')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcsrsm2_zeroPivot
            type(c_ptr), value :: handle
            type(c_ptr), value :: info
            type(c_ptr), value :: position
        end function hipsparseXcsrsm2_zeroPivot

!       hipsparseXcsrsm2_bufferSizeExt
        function hipsparseScsrsm2_bufferSizeExt(handle, algo, transA, transB, m, nrhs, &
                nnz, alpha, descrA, csrValA, csrRowPtrA, csrColIndA, B, ldb, info, &
                policy, bufferSize) &
                bind(c, name = 'hipsparseScsrsm2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrsm2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: algo
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: nrhs
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: bufferSize
        end function hipsparseScsrsm2_bufferSizeExt

        function hipsparseDcsrsm2_bufferSizeExt(handle, algo, transA, transB, m, nrhs, &
                nnz, alpha, descrA, csrValA, csrRowPtrA, csrColIndA, B, ldb, info, &
                policy, bufferSize) &
                bind(c, name = 'hipsparseDcsrsm2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrsm2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: algo
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: nrhs
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: bufferSize
        end function hipsparseDcsrsm2_bufferSizeExt

        function hipsparseCcsrsm2_bufferSizeExt(handle, algo, transA, transB, m, nrhs, &
                nnz, alpha, descrA, csrValA, csrRowPtrA, csrColIndA, B, ldb, info, &
                policy, bufferSize) &
                bind(c, name = 'hipsparseCcsrsm2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrsm2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: algo
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: nrhs
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: bufferSize
        end function hipsparseCcsrsm2_bufferSizeExt

        function hipsparseZcsrsm2_bufferSizeExt(handle, algo, transA, transB, m, nrhs, &
                nnz, alpha, descrA, csrValA, csrRowPtrA, csrColIndA, B, ldb, info, &
                policy, bufferSize) &
                bind(c, name = 'hipsparseZcsrsm2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrsm2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: algo
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: nrhs
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: bufferSize
        end function hipsparseZcsrsm2_bufferSizeExt

!       hipsparseXcsrsm2_analysis
        function hipsparseScsrsm2_analysis(handle, algo, transA, transB, m, nrhs, nnz, &
                alpha, descrA, csrValA, csrRowPtrA, csrColIndA, B, ldb, info, policy, &
                buffer) &
                bind(c, name = 'hipsparseScsrsm2_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrsm2_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: algo
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: nrhs
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseScsrsm2_analysis

        function hipsparseDcsrsm2_analysis(handle, algo, transA, transB, m, nrhs, nnz, &
                alpha, descrA, csrValA, csrRowPtrA, csrColIndA, B, ldb, info, policy, &
                buffer) &
                bind(c, name = 'hipsparseDcsrsm2_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrsm2_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: algo
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: nrhs
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseDcsrsm2_analysis

        function hipsparseCcsrsm2_analysis(handle, algo, transA, transB, m, nrhs, nnz, &
                alpha, descrA, csrValA, csrRowPtrA, csrColIndA, B, ldb, info, policy, &
                buffer) &
                bind(c, name = 'hipsparseCcsrsm2_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrsm2_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: algo
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: nrhs
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseCcsrsm2_analysis

        function hipsparseZcsrsm2_analysis(handle, algo, transA, transB, m, nrhs, nnz, &
                alpha, descrA, csrValA, csrRowPtrA, csrColIndA, B, ldb, info, policy, &
                buffer) &
                bind(c, name = 'hipsparseZcsrsm2_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrsm2_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: algo
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: nrhs
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseZcsrsm2_analysis

!       hipsparseXcsrsm2_solve
        function hipsparseScsrsm2_solve(handle, algo, transA, transB, m, nrhs, nnz, &
                alpha, descrA, csrValA, csrRowPtrA, csrColIndA, B, ldb, info, policy, &
                buffer) &
                bind(c, name = 'hipsparseScsrsm2_solve')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrsm2_solve
            type(c_ptr), value :: handle
            integer(c_int), value :: algo
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: nrhs
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseScsrsm2_solve

        function hipsparseDcsrsm2_solve(handle, algo, transA, transB, m, nrhs, nnz, &
                alpha, descrA, csrValA, csrRowPtrA, csrColIndA, B, ldb, info, policy, &
                buffer) &
                bind(c, name = 'hipsparseDcsrsm2_solve')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrsm2_solve
            type(c_ptr), value :: handle
            integer(c_int), value :: algo
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: nrhs
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseDcsrsm2_solve

        function hipsparseCcsrsm2_solve(handle, algo, transA, transB, m, nrhs, nnz, &
                alpha, descrA, csrValA, csrRowPtrA, csrColIndA, B, ldb, info, policy, &
                buffer) &
                bind(c, name = 'hipsparseCcsrsm2_solve')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrsm2_solve
            type(c_ptr), value :: handle
            integer(c_int), value :: algo
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: nrhs
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseCcsrsm2_solve

        function hipsparseZcsrsm2_solve(handle, algo, transA, transB, m, nrhs, nnz, &
                alpha, descrA, csrValA, csrRowPtrA, csrColIndA, B, ldb, info, policy, &
                buffer) &
                bind(c, name = 'hipsparseZcsrsm2_solve')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrsm2_solve
            type(c_ptr), value :: handle
            integer(c_int), value :: algo
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: nrhs
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), value :: B
            integer(c_int), value :: ldb
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseZcsrsm2_solve

!       hipsparseXgemmi
        function hipsparseSgemmi(handle, m, n, k, nnz, alpha, A, lda, cscValB, &
                cscColPtrB, cscRowIndB, beta, C, ldc) &
                bind(c, name = 'hipsparseSgemmi')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSgemmi
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), intent(in), value :: cscValB
            type(c_ptr), intent(in), value :: cscColPtrB
            type(c_ptr), intent(in), value :: cscRowIndB
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseSgemmi

        function hipsparseDgemmi(handle, m, n, k, nnz, alpha, A, lda, cscValB, &
                cscColPtrB, cscRowIndB, beta, C, ldc) &
                bind(c, name = 'hipsparseDgemmi')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDgemmi
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), intent(in), value :: cscValB
            type(c_ptr), intent(in), value :: cscColPtrB
            type(c_ptr), intent(in), value :: cscRowIndB
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseDgemmi

        function hipsparseCgemmi(handle, m, n, k, nnz, alpha, A, lda, cscValB, &
                cscColPtrB, cscRowIndB, beta, C, ldc) &
                bind(c, name = 'hipsparseCgemmi')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCgemmi
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), intent(in), value :: cscValB
            type(c_ptr), intent(in), value :: cscColPtrB
            type(c_ptr), intent(in), value :: cscRowIndB
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseCgemmi

        function hipsparseZgemmi(handle, m, n, k, nnz, alpha, A, lda, cscValB, &
                cscColPtrB, cscRowIndB, beta, C, ldc) &
                bind(c, name = 'hipsparseZgemmi')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZgemmi
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), intent(in), value :: cscValB
            type(c_ptr), intent(in), value :: cscColPtrB
            type(c_ptr), intent(in), value :: cscRowIndB
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), value :: C
            integer(c_int), value :: ldc
        end function hipsparseZgemmi

! ===========================================================================
!   extra SPARSE
! ===========================================================================

!       hipsparseXcsrgeamNnz
        function hipsparseXcsrgeamNnz(handle, m, n, descrA, nnzA, csrRowPtrA, &
                csrColIndA, descrB, nnzB, csrRowPtrB, csrColIndB, descrC, &
                csrRowPtrC, nnzTotalDevHostPtr) &
                bind(c, name = 'hipsparseXcsrgeamNnz')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcsrgeamNnz
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: nnzTotalDevHostPtr
        end function hipsparseXcsrgeamNnz

!       hipsparseXcsrgeam
        function hipsparseScsrgeam(handle, m, n, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, beta, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseScsrgeam')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrgeam
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseScsrgeam

        function hipsparseDcsrgeam(handle, m, n, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, beta, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseDcsrgeam')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrgeam
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseDcsrgeam

        function hipsparseCcsrgeam(handle, m, n, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, beta, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseCcsrgeam')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrgeam
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseCcsrgeam

        function hipsparseZcsrgeam(handle, m, n, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, beta, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseZcsrgeam')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrgeam
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseZcsrgeam

!       hipsparseXcsrgeam2_bufferSizeExt
        function hipsparseScsrgeam2_bufferSizeExt(handle, m, n, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, beta, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC, bufferSize) &
                bind(c, name = 'hipsparseScsrgeam2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrgeam2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), intent(in), value :: csrValC
            type(c_ptr), intent(in), value :: csrRowPtrC
            type(c_ptr), intent(in), value :: csrColIndC
            type(c_ptr), value :: bufferSize
        end function hipsparseScsrgeam2_bufferSizeExt

        function hipsparseDcsrgeam2_bufferSizeExt(handle, m, n, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, beta, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC, bufferSize) &
                bind(c, name = 'hipsparseDcsrgeam2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrgeam2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), intent(in), value :: csrValC
            type(c_ptr), intent(in), value :: csrRowPtrC
            type(c_ptr), intent(in), value :: csrColIndC
            type(c_ptr), value :: bufferSize
        end function hipsparseDcsrgeam2_bufferSizeExt

        function hipsparseCcsrgeam2_bufferSizeExt(handle, m, n, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, beta, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC, bufferSize) &
                bind(c, name = 'hipsparseCcsrgeam2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrgeam2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), intent(in), value :: csrValC
            type(c_ptr), intent(in), value :: csrRowPtrC
            type(c_ptr), intent(in), value :: csrColIndC
            type(c_ptr), value :: bufferSize
        end function hipsparseCcsrgeam2_bufferSizeExt

        function hipsparseZcsrgeam2_bufferSizeExt(handle, m, n, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, beta, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC, bufferSize) &
                bind(c, name = 'hipsparseZcsrgeam2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrgeam2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), intent(in), value :: csrValC
            type(c_ptr), intent(in), value :: csrRowPtrC
            type(c_ptr), intent(in), value :: csrColIndC
            type(c_ptr), value :: bufferSize
        end function hipsparseZcsrgeam2_bufferSizeExt

!       hipsparseXcsrgeam2Nnz
        function hipsparseXcsrgeam2Nnz(handle, m, n, descrA, nnzA, csrRowPtrA, &
                csrColIndA, descrB, nnzB, csrRowPtrB, csrColIndB, descrC, &
                csrRowPtrC, nnzTotalDevHostPtr, workspace) &
                bind(c, name = 'hipsparseXcsrgeam2Nnz')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcsrgeam2Nnz
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: nnzTotalDevHostPtr
            type(c_ptr), value :: workspace
        end function hipsparseXcsrgeam2Nnz

!       hipsparseXcsrgeam2
        function hipsparseScsrgeam2(handle, m, n, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, beta, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC, buffer) &
                bind(c, name = 'hipsparseScsrgeam2')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrgeam2
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
            type(c_ptr), value :: buffer
        end function hipsparseScsrgeam2

        function hipsparseDcsrgeam2(handle, m, n, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, beta, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC, buffer) &
                bind(c, name = 'hipsparseDcsrgeam2')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrgeam2
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
            type(c_ptr), value :: buffer
        end function hipsparseDcsrgeam2

        function hipsparseCcsrgeam2(handle, m, n, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, beta, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC, buffer) &
                bind(c, name = 'hipsparseCcsrgeam2')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrgeam2
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
            type(c_ptr), value :: buffer
        end function hipsparseCcsrgeam2

        function hipsparseZcsrgeam2(handle, m, n, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, beta, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC, buffer) &
                bind(c, name = 'hipsparseZcsrgeam2')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrgeam2
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
            type(c_ptr), value :: buffer
        end function hipsparseZcsrgeam2

!       hipsparseXcsrgemmNnz
        function hipsparseXcsrgemmNnz(handle, transA, transB, m, n, k, descrA, nnzA, &
                csrRowPtrA, csrColIndA, descrB, nnzB, csrRowPtrB, csrColIndB, descrC, &
                csrRowPtrC, nnzTotalDevHostPtr) &
                bind(c, name = 'hipsparseXcsrgemmNnz')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcsrgemmNnz
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: nnzTotalDevHostPtr
        end function hipsparseXcsrgemmNnz

!       hipsparseScsrgemm
        function hipsparseScsrgemm(handle, transA, transB, m, n, k, descrA, nnzA, &
                csrValA, csrRowPtrA, csrColIndA, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseScsrgemm')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrgemm
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), intent(in), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseScsrgemm

        function hipsparseDcsrgemm(handle, transA, transB, m, n, k, descrA, nnzA, &
                csrValA, csrRowPtrA, csrColIndA, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseDcsrgemm')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrgemm
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), intent(in), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseDcsrgemm

        function hipsparseCcsrgemm(handle, transA, transB, m, n, k, descrA, nnzA, &
                csrValA, csrRowPtrA, csrColIndA, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseCcsrgemm')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrgemm
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), intent(in), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseCcsrgemm

        function hipsparseZcsrgemm(handle, transA, transB, m, n, k, descrA, nnzA, &
                csrValA, csrRowPtrA, csrColIndA, descrB, nnzB, csrValB, csrRowPtrB, &
                csrColIndB, descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseZcsrgemm')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrgemm
            type(c_ptr), value :: handle
            integer(c_int), value :: transA
            integer(c_int), value :: transB
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), intent(in), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseZcsrgemm

!       hipsparseXcsrgemm2_bufferSizeExt
        function hipsparseScsrgemm2_bufferSizeExt(handle, m, n, k, alpha, descrA, &
                nnzA, csrRowPtrA, csrColIndA, descrB, nnzB, csrRowPtrB, csrColIndB, &
                beta, descrD, nnzD, csrRowPtrD, csrColIndD, info, bufferSize) &
                bind(c, name = 'hipsparseScsrgemm2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrgemm2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrD
            integer(c_int), value :: nnzD
            type(c_ptr), intent(in), value :: csrRowPtrD
            type(c_ptr), intent(in), value :: csrColIndD
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseScsrgemm2_bufferSizeExt

        function hipsparseDcsrgemm2_bufferSizeExt(handle, m, n, k, alpha, descrA, &
                nnzA, csrRowPtrA, csrColIndA, descrB, nnzB, csrRowPtrB, csrColIndB, &
                beta, descrD, nnzD, csrRowPtrD, csrColIndD, info, bufferSize) &
                bind(c, name = 'hipsparseDcsrgemm2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrgemm2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrD
            integer(c_int), value :: nnzD
            type(c_ptr), intent(in), value :: csrRowPtrD
            type(c_ptr), intent(in), value :: csrColIndD
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseDcsrgemm2_bufferSizeExt

        function hipsparseCcsrgemm2_bufferSizeExt(handle, m, n, k, alpha, descrA, &
                nnzA, csrRowPtrA, csrColIndA, descrB, nnzB, csrRowPtrB, csrColIndB, &
                beta, descrD, nnzD, csrRowPtrD, csrColIndD, info, bufferSize) &
                bind(c, name = 'hipsparseCcsrgemm2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrgemm2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrD
            integer(c_int), value :: nnzD
            type(c_ptr), intent(in), value :: csrRowPtrD
            type(c_ptr), intent(in), value :: csrColIndD
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseCcsrgemm2_bufferSizeExt

        function hipsparseZcsrgemm2_bufferSizeExt(handle, m, n, k, alpha, descrA, &
                nnzA, csrRowPtrA, csrColIndA, descrB, nnzB, csrRowPtrB, csrColIndB, &
                beta, descrD, nnzD, csrRowPtrD, csrColIndD, info, bufferSize) &
                bind(c, name = 'hipsparseZcsrgemm2_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrgemm2_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrD
            integer(c_int), value :: nnzD
            type(c_ptr), intent(in), value :: csrRowPtrD
            type(c_ptr), intent(in), value :: csrColIndD
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseZcsrgemm2_bufferSizeExt

!       hipsparseXcsrgemm2Nnz
        function hipsparseXcsrgemm2Nnz(handle, m, n, k, descrA, nnzA, csrRowPtrA, &
                csrColIndA, descrB, nnzB, csrRowPtrB, csrColIndB, descrD, nnzD, &
                csrRowPtrD, csrColIndD, descrC, csrRowPtrC, nnzTotalDevHostPtr, info, &
                buffer) &
                bind(c, name = 'hipsparseXcsrgemm2Nnz')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcsrgemm2Nnz
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: descrD
            integer(c_int), value :: nnzD
            type(c_ptr), intent(in), value :: csrRowPtrD
            type(c_ptr), intent(in), value :: csrColIndD
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: nnzTotalDevHostPtr
            type(c_ptr), intent(in), value :: info
            type(c_ptr), value :: buffer
        end function hipsparseXcsrgemm2Nnz

!       hipsparseXcsrgemm2
        function hipsparseScsrgemm2(handle, m, n, k, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, descrB, nnzB, csrValB, csrRowPtrB, csrColIndB, &
                beta, descrD, nnzD, csrValD, csrRowPtrD, csrColIndD, descrC, csrValC, &
                csrRowPtrC, csrColIndC, info, buffer) &
                bind(c, name = 'hipsparseScsrgemm2')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrgemm2
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrD
            integer(c_int), value :: nnzD
            type(c_ptr), intent(in), value :: csrValD
            type(c_ptr), intent(in), value :: csrRowPtrD
            type(c_ptr), intent(in), value :: csrColIndD
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), intent(in), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
            type(c_ptr), intent(in), value :: info
            type(c_ptr), value :: buffer
        end function hipsparseScsrgemm2

        function hipsparseDcsrgemm2(handle, m, n, k, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, descrB, nnzB, csrValB, csrRowPtrB, csrColIndB, &
                beta, descrD, nnzD, csrValD, csrRowPtrD, csrColIndD, descrC, csrValC, &
                csrRowPtrC, csrColIndC, info, buffer) &
                bind(c, name = 'hipsparseDcsrgemm2')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrgemm2
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrD
            integer(c_int), value :: nnzD
            type(c_ptr), intent(in), value :: csrValD
            type(c_ptr), intent(in), value :: csrRowPtrD
            type(c_ptr), intent(in), value :: csrColIndD
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), intent(in), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
            type(c_ptr), intent(in), value :: info
            type(c_ptr), value :: buffer
        end function hipsparseDcsrgemm2

        function hipsparseCcsrgemm2(handle, m, n, k, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, descrB, nnzB, csrValB, csrRowPtrB, csrColIndB, &
                beta, descrD, nnzD, csrValD, csrRowPtrD, csrColIndD, descrC, csrValC, &
                csrRowPtrC, csrColIndC, info, buffer) &
                bind(c, name = 'hipsparseCcsrgemm2')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrgemm2
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrD
            integer(c_int), value :: nnzD
            type(c_ptr), intent(in), value :: csrValD
            type(c_ptr), intent(in), value :: csrRowPtrD
            type(c_ptr), intent(in), value :: csrColIndD
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), intent(in), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
            type(c_ptr), intent(in), value :: info
            type(c_ptr), value :: buffer
        end function hipsparseCcsrgemm2

        function hipsparseZcsrgemm2(handle, m, n, k, alpha, descrA, nnzA, csrValA, &
                csrRowPtrA, csrColIndA, descrB, nnzB, csrValB, csrRowPtrB, csrColIndB, &
                beta, descrD, nnzD, csrValD, csrRowPtrD, csrColIndD, descrC, csrValC, &
                csrRowPtrC, csrColIndC, info, buffer) &
                bind(c, name = 'hipsparseZcsrgemm2')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrgemm2
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: k
            type(c_ptr), intent(in), value :: alpha
            type(c_ptr), intent(in), value :: descrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: descrB
            integer(c_int), value :: nnzB
            type(c_ptr), intent(in), value :: csrValB
            type(c_ptr), intent(in), value :: csrRowPtrB
            type(c_ptr), intent(in), value :: csrColIndB
            type(c_ptr), intent(in), value :: beta
            type(c_ptr), intent(in), value :: descrD
            integer(c_int), value :: nnzD
            type(c_ptr), intent(in), value :: csrValD
            type(c_ptr), intent(in), value :: csrRowPtrD
            type(c_ptr), intent(in), value :: csrColIndD
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), intent(in), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
            type(c_ptr), intent(in), value :: info
            type(c_ptr), value :: buffer
        end function hipsparseZcsrgemm2

! ===========================================================================
!   preconditioner SPARSE
! ===========================================================================

!       hipsparseXbsrilu02_zeroPivot
        function hipsparseXbsrilu02_zeroPivot(handle, info, position) &
                bind(c, name = 'hipsparseXbsrilu02_zeroPivot')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXbsrilu02_zeroPivot
            type(c_ptr), value :: handle
            type(c_ptr), value :: info
            type(c_ptr), value :: position
        end function hipsparseXbsrilu02_zeroPivot

!       hipsparseXbsrilu02_bufferSize
        function hipsparseSbsrilu02_bufferSize(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, bufferSize) &
                bind(c, name = 'hipsparseSbsrilu02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSbsrilu02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseSbsrilu02_bufferSize

        function hipsparseDbsrilu02_bufferSize(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, bufferSize) &
                bind(c, name = 'hipsparseDbsrilu02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDbsrilu02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseDbsrilu02_bufferSize

        function hipsparseCbsrilu02_bufferSize(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, bufferSize) &
                bind(c, name = 'hipsparseCbsrilu02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCbsrilu02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseCbsrilu02_bufferSize

        function hipsparseZbsrilu02_bufferSize(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, bufferSize) &
                bind(c, name = 'hipsparseZbsrilu02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZbsrilu02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseZbsrilu02_bufferSize

!       hipsparseXbsrilu02_analysis
        function hipsparseSbsrilu02_analysis(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseSbsrilu02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSbsrilu02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseSbsrilu02_analysis

        function hipsparseDbsrilu02_analysis(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseDbsrilu02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDbsrilu02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseDbsrilu02_analysis

        function hipsparseCbsrilu02_analysis(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseCbsrilu02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCbsrilu02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseCbsrilu02_analysis

        function hipsparseZbsrilu02_analysis(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseZbsrilu02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZbsrilu02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseZbsrilu02_analysis

!       hipsparseXbsrilu02
        function hipsparseSbsrilu02(handle, dir, mb, nnzb, descr, bsrVal, bsrRowPtr, &
                bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseSbsrilu02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSbsrilu02
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseSbsrilu02

        function hipsparseDbsrilu02(handle, dir, mb, nnzb, descr, bsrVal, bsrRowPtr, &
                bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseDbsrilu02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDbsrilu02
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseDbsrilu02

        function hipsparseCbsrilu02(handle, dir, mb, nnzb, descr, bsrVal, bsrRowPtr, &
                bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseCbsrilu02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCbsrilu02
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseCbsrilu02

        function hipsparseZbsrilu02(handle, dir, mb, nnzb, descr, bsrVal, bsrRowPtr, &
                bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseZbsrilu02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZbsrilu02
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseZbsrilu02

!       hipsparseXcsrilu02_zeroPivot
        function hipsparseXcsrilu02_zeroPivot(handle, info, position) &
                bind(c, name = 'hipsparseXcsrilu02_zeroPivot')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcsrilu02_zeroPivot
            type(c_ptr), value :: handle
            type(c_ptr), value :: info
            type(c_ptr), value :: position
        end function hipsparseXcsrilu02_zeroPivot

!       hipsparseXcsrilu02_bufferSize
        function hipsparseScsrilu02_bufferSize(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseScsrilu02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrilu02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseScsrilu02_bufferSize

        function hipsparseDcsrilu02_bufferSize(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseDcsrilu02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrilu02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseDcsrilu02_bufferSize

        function hipsparseCcsrilu02_bufferSize(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseCcsrilu02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrilu02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseCcsrilu02_bufferSize

        function hipsparseZcsrilu02_bufferSize(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseZcsrilu02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrilu02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseZcsrilu02_bufferSize

!       hipsparseXcsrilu02_bufferSizeExt
        function hipsparseScsrilu02_bufferSizeExt(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseScsrilu02_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrilu02_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseScsrilu02_bufferSizeExt

        function hipsparseDcsrilu02_bufferSizeExt(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseDcsrilu02_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrilu02_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseDcsrilu02_bufferSizeExt

        function hipsparseCcsrilu02_bufferSizeExt(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseCcsrilu02_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrilu02_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseCcsrilu02_bufferSizeExt

        function hipsparseZcsrilu02_bufferSizeExt(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseZcsrilu02_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrilu02_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseZcsrilu02_bufferSizeExt

!       hipsparseXcsrilu02_analysis
        function hipsparseScsrilu02_analysis(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseScsrilu02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrilu02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseScsrilu02_analysis

        function hipsparseDcsrilu02_analysis(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseDcsrilu02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrilu02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseDcsrilu02_analysis

        function hipsparseCcsrilu02_analysis(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseCcsrilu02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrilu02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseCcsrilu02_analysis

        function hipsparseZcsrilu02_analysis(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseZcsrilu02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrilu02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseZcsrilu02_analysis

!       hipsparseXcsrilu02
        function hipsparseScsrilu02(handle, m, nnz, descr, csrVal, csrRowPtr, &
                csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseScsrilu02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsrilu02
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseScsrilu02

        function hipsparseDcsrilu02(handle, m, nnz, descr, csrVal, csrRowPtr, &
                csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseDcsrilu02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsrilu02
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseDcsrilu02

        function hipsparseCcsrilu02(handle, m, nnz, descr, csrVal, csrRowPtr, &
                csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseCcsrilu02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsrilu02
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseCcsrilu02

        function hipsparseZcsrilu02(handle, m, nnz, descr, csrVal, csrRowPtr, &
                csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseZcsrilu02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsrilu02
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseZcsrilu02

!       hipsparseXbsric02_zeroPivot
        function hipsparseXbsric02_zeroPivot(handle, info, position) &
                bind(c, name = 'hipsparseXbsric02_zeroPivot')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXbsric02_zeroPivot
            type(c_ptr), value :: handle
            type(c_ptr), value :: info
            type(c_ptr), value :: position
        end function hipsparseXbsric02_zeroPivot

!       hipsparseXbsric02_bufferSize
        function hipsparseSbsric02_bufferSize(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, bufferSize) &
                bind(c, name = 'hipsparseSbsric02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSbsric02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseSbsric02_bufferSize

        function hipsparseDbsric02_bufferSize(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, bufferSize) &
                bind(c, name = 'hipsparseDbsric02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDbsric02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseDbsric02_bufferSize

        function hipsparseCbsric02_bufferSize(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, bufferSize) &
                bind(c, name = 'hipsparseCbsric02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCbsric02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseCbsric02_bufferSize

        function hipsparseZbsric02_bufferSize(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, bufferSize) &
                bind(c, name = 'hipsparseZbsric02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZbsric02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseZbsric02_bufferSize

!       hipsparseXbsric02_analysis
        function hipsparseSbsric02_analysis(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseSbsric02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSbsric02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseSbsric02_analysis

        function hipsparseDbsric02_analysis(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseDbsric02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDbsric02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseDbsric02_analysis

        function hipsparseCbsric02_analysis(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseCbsric02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCbsric02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseCbsric02_analysis

        function hipsparseZbsric02_analysis(handle, dir, mb, nnzb, descr, bsrVal, &
                bsrRowPtr, bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseZbsric02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZbsric02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseZbsric02_analysis

!       hipsparseXbsric02
        function hipsparseSbsric02(handle, dir, mb, nnzb, descr, bsrVal, bsrRowPtr, &
                bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseSbsric02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSbsric02
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseSbsric02

        function hipsparseDbsric02(handle, dir, mb, nnzb, descr, bsrVal, bsrRowPtr, &
                bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseDbsric02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDbsric02
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseDbsric02

        function hipsparseCbsric02(handle, dir, mb, nnzb, descr, bsrVal, bsrRowPtr, &
                bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseCbsric02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCbsric02
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseCbsric02

        function hipsparseZbsric02(handle, dir, mb, nnzb, descr, bsrVal, bsrRowPtr, &
                bsrColInd, blockDim, info, policy, buffer) &
                bind(c, name = 'hipsparseZbsric02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZbsric02
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: mb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: bsrVal
            type(c_ptr), intent(in), value :: bsrRowPtr
            type(c_ptr), intent(in), value :: bsrColInd
            integer(c_int), value :: blockDim
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseZbsric02

!       hipsparseXcsric02_zeroPivot
        function hipsparseXcsric02_zeroPivot(handle, info, position) &
                bind(c, name = 'hipsparseXcsric02_zeroPivot')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcsric02_zeroPivot
            type(c_ptr), value :: handle
            type(c_ptr), value :: info
            type(c_ptr), value :: position
        end function hipsparseXcsric02_zeroPivot

!       hipsparseXcsric02_bufferSize
        function hipsparseScsric02_bufferSize(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseScsric02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsric02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseScsric02_bufferSize

        function hipsparseDcsric02_bufferSize(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseDcsric02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsric02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseDcsric02_bufferSize

        function hipsparseCcsric02_bufferSize(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseCcsric02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsric02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseCcsric02_bufferSize

        function hipsparseZcsric02_bufferSize(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseZcsric02_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsric02_bufferSize
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseZcsric02_bufferSize

!       hipsparseXcsric02_bufferSizeExt
        function hipsparseScsric02_bufferSizeExt(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseScsric02_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsric02_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseScsric02_bufferSizeExt

        function hipsparseDcsric02_bufferSizeExt(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseDcsric02_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsric02_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseDcsric02_bufferSizeExt

        function hipsparseCcsric02_bufferSizeExt(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseCcsric02_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsric02_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseCcsric02_bufferSizeExt

        function hipsparseZcsric02_bufferSizeExt(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, bufferSize) &
                bind(c, name = 'hipsparseZcsric02_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsric02_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            type(c_ptr), value :: bufferSize
        end function hipsparseZcsric02_bufferSizeExt

!       hipsparseXcsric02_analysis
        function hipsparseScsric02_analysis(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseScsric02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsric02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseScsric02_analysis

        function hipsparseDcsric02_analysis(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseDcsric02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsric02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseDcsric02_analysis

        function hipsparseCcsric02_analysis(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseCcsric02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsric02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseCcsric02_analysis

        function hipsparseZcsric02_analysis(handle, m, nnz, descr, csrVal, &
                csrRowPtr, csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseZcsric02_analysis')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsric02_analysis
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseZcsric02_analysis

!       hipsparseXcsric02
        function hipsparseScsric02(handle, m, nnz, descr, csrVal, csrRowPtr, &
                csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseScsric02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsric02
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseScsric02

        function hipsparseDcsric02(handle, m, nnz, descr, csrVal, csrRowPtr, &
                csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseDcsric02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsric02
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseDcsric02

        function hipsparseCcsric02(handle, m, nnz, descr, csrVal, csrRowPtr, &
                csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseCcsric02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsric02
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseCcsric02

        function hipsparseZcsric02(handle, m, nnz, descr, csrVal, csrRowPtr, &
                csrColInd, info, policy, buffer) &
                bind(c, name = 'hipsparseZcsric02')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsric02
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: info
            integer(c_int), value :: policy
            type(c_ptr), value :: buffer
        end function hipsparseZcsric02

! ===========================================================================
!   conversion SPARSE
! ===========================================================================

!       hipsparseXnnz
        function hipsparseSnnz(handle, dir, m, n, descrA, A, lda, &
                nnzPerRowColumn, nnzTotalDevHostPtr) &
                bind(c, name = 'hipsparseSnnz')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSnnz
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), value :: nnzPerRowColumn
            type(c_ptr), value :: nnzTotalDevHostPtr
        end function hipsparseSnnz

        function hipsparseDnnz(handle, dir, m, n, descrA, A, lda, &
                nnzPerRowColumn, nnzTotalDevHostPtr) &
                bind(c, name = 'hipsparseDnnz')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDnnz
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), value :: nnzPerRowColumn
            type(c_ptr), value :: nnzTotalDevHostPtr
        end function hipsparseDnnz

        function hipsparseCnnz(handle, dir, m, n, descrA, A, lda, &
                nnzPerRowColumn, nnzTotalDevHostPtr) &
                bind(c, name = 'hipsparseCnnz')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCnnz
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), value :: nnzPerRowColumn
            type(c_ptr), value :: nnzTotalDevHostPtr
        end function hipsparseCnnz

        function hipsparseZnnz(handle, dir, m, n, descrA, A, lda, &
                nnzPerRowColumn, nnzTotalDevHostPtr) &
                bind(c, name = 'hipsparseZnnz')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZnnz
            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), value :: nnzPerRowColumn
            type(c_ptr), value :: nnzTotalDevHostPtr
        end function hipsparseZnnz

!       hipsparseXdense2csr
        function hipsparseSdense2csr(handle, m, n, descrA, A, lda, nnzPerRows, &
                csrValA, csrRowPtrA, csrColIndA) &
                bind(c, name = 'hipsparseSdense2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSdense2csr
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), intent(in), value :: nnzPerRows
            type(c_ptr), value :: csrValA
            type(c_ptr), value :: csrRowPtrA
            type(c_ptr), value :: csrColIndA
        end function hipsparseSdense2csr

        function hipsparseDdense2csr(handle, m, n, descrA, A, lda, nnzPerRows, &
                csrValA, csrRowPtrA, csrColIndA) &
                bind(c, name = 'hipsparseDdense2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDdense2csr
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), intent(in), value :: nnzPerRows
            type(c_ptr), value :: csrValA
            type(c_ptr), value :: csrRowPtrA
            type(c_ptr), value :: csrColIndA
        end function hipsparseDdense2csr

        function hipsparseCdense2csr(handle, m, n, descrA, A, lda, nnzPerRows, &
                csrValA, csrRowPtrA, csrColIndA) &
                bind(c, name = 'hipsparseCdense2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCdense2csr
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), intent(in), value :: nnzPerRows
            type(c_ptr), value :: csrValA
            type(c_ptr), value :: csrRowPtrA
            type(c_ptr), value :: csrColIndA
        end function hipsparseCdense2csr

        function hipsparseZdense2csr(handle, m, n, descrA, A, lda, nnzPerRows, &
                csrValA, csrRowPtrA, csrColIndA) &
                bind(c, name = 'hipsparseZdense2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZdense2csr
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), intent(in), value :: nnzPerRows
            type(c_ptr), value :: csrValA
            type(c_ptr), value :: csrRowPtrA
            type(c_ptr), value :: csrColIndA
        end function hipsparseZdense2csr

!       hipsparseXdense2csc
        function hipsparseSdense2csc(handle, m, n, descrA, A, lda, nnzPerColumns, &
                cscValA, cscRowPtrA, cscColIndA) &
                bind(c, name = 'hipsparseSdense2csc')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSdense2csc
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), intent(in), value :: nnzPerColumns
            type(c_ptr), value :: cscValA
            type(c_ptr), value :: cscRowPtrA
            type(c_ptr), value :: cscColIndA
        end function hipsparseSdense2csc

        function hipsparseDdense2csc(handle, m, n, descrA, A, lda, nnzPerColumns, &
                cscValA, cscRowPtrA, cscColIndA) &
                bind(c, name = 'hipsparseDdense2csc')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDdense2csc
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), intent(in), value :: nnzPerColumns
            type(c_ptr), value :: cscValA
            type(c_ptr), value :: cscRowPtrA
            type(c_ptr), value :: cscColIndA
        end function hipsparseDdense2csc

        function hipsparseCdense2csc(handle, m, n, descrA, A, lda, nnzPerColumns, &
                cscValA, cscRowPtrA, cscColIndA) &
                bind(c, name = 'hipsparseCdense2csc')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCdense2csc
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), intent(in), value :: nnzPerColumns
            type(c_ptr), value :: cscValA
            type(c_ptr), value :: cscRowPtrA
            type(c_ptr), value :: cscColIndA
        end function hipsparseCdense2csc

        function hipsparseZdense2csc(handle, m, n, descrA, A, lda, nnzPerColumns, &
                cscValA, cscRowPtrA, cscColIndA) &
                bind(c, name = 'hipsparseZdense2csc')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZdense2csc
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: A
            integer(c_int), value :: lda
            type(c_ptr), intent(in), value :: nnzPerColumns
            type(c_ptr), value :: cscValA
            type(c_ptr), value :: cscRowPtrA
            type(c_ptr), value :: cscColIndA
        end function hipsparseZdense2csc

!       hipsparseXcsr2dense
        function hipsparseScsr2dense(handle, m, n, descrA, csrValA, csrRowPtrA, &
                csrColIndA, A, lda) &
                bind(c, name = 'hipsparseScsr2dense')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsr2dense
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), value :: A
            integer(c_int), value :: lda
        end function hipsparseScsr2dense

        function hipsparseDcsr2dense(handle, m, n, descrA, csrValA, csrRowPtrA, &
                csrColIndA, A, lda) &
                bind(c, name = 'hipsparseDcsr2dense')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsr2dense
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), value :: A
            integer(c_int), value :: lda
        end function hipsparseDcsr2dense

        function hipsparseCcsr2dense(handle, m, n, descrA, csrValA, csrRowPtrA, &
                csrColIndA, A, lda) &
                bind(c, name = 'hipsparseCcsr2dense')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsr2dense
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), value :: A
            integer(c_int), value :: lda
        end function hipsparseCcsr2dense

        function hipsparseZcsr2dense(handle, m, n, descrA, csrValA, csrRowPtrA, &
                csrColIndA, A, lda) &
                bind(c, name = 'hipsparseZcsr2dense')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsr2dense
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), value :: A
            integer(c_int), value :: lda
        end function hipsparseZcsr2dense

!       hipsparseXcsc2dense
        function hipsparseScsc2dense(handle, m, n, descrA, cscValA, cscRowPtrA, &
                cscColIndA, A, lda) &
                bind(c, name = 'hipsparseScsc2dense')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsc2dense
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: cscValA
            type(c_ptr), intent(in), value :: cscRowPtrA
            type(c_ptr), intent(in), value :: cscColIndA
            type(c_ptr), value :: A
            integer(c_int), value :: lda
        end function hipsparseScsc2dense

        function hipsparseDcsc2dense(handle, m, n, descrA, cscValA, cscRowPtrA, &
                cscColIndA, A, lda) &
                bind(c, name = 'hipsparseDcsc2dense')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsc2dense
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: cscValA
            type(c_ptr), intent(in), value :: cscRowPtrA
            type(c_ptr), intent(in), value :: cscColIndA
            type(c_ptr), value :: A
            integer(c_int), value :: lda
        end function hipsparseDcsc2dense

        function hipsparseCcsc2dense(handle, m, n, descrA, cscValA, cscRowPtrA, &
                cscColIndA, A, lda) &
                bind(c, name = 'hipsparseCcsc2dense')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsc2dense
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: cscValA
            type(c_ptr), intent(in), value :: cscRowPtrA
            type(c_ptr), intent(in), value :: cscColIndA
            type(c_ptr), value :: A
            integer(c_int), value :: lda
        end function hipsparseCcsc2dense

        function hipsparseZcsc2dense(handle, m, n, descrA, cscValA, cscRowPtrA, &
                cscColIndA, A, lda) &
                bind(c, name = 'hipsparseZcsc2dense')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsc2dense
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: cscValA
            type(c_ptr), intent(in), value :: cscRowPtrA
            type(c_ptr), intent(in), value :: cscColIndA
            type(c_ptr), value :: A
            integer(c_int), value :: lda
        end function hipsparseZcsc2dense

!       hipsparseXnnz_compress
        function hipsparseSnnz_compress(handle, m, descrA, csrValA, csrRowPtrA, &
                nnzPerRow, nnzC, tol) &
                bind(c, name = 'hipsparseSnnz_compress')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSnnz_compress
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), value :: nnzPerRow
            type(c_ptr), value :: nnzC
            real(c_float), value :: tol
        end function hipsparseSnnz_compress

        function hipsparseDnnz_compress(handle, m, descrA, csrValA, csrRowPtrA, &
                nnzPerRow, nnzC, tol) &
                bind(c, name = 'hipsparseDnnz_compress')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDnnz_compress
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), value :: nnzPerRow
            type(c_ptr), value :: nnzC
            real(c_double), value :: tol
        end function hipsparseDnnz_compress

        function hipsparseCnnz_compress(handle, m, descrA, csrValA, csrRowPtrA, &
                nnzPerRow, nnzC, tol) &
                bind(c, name = 'hipsparseCnnz_compress')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCnnz_compress
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), value :: nnzPerRow
            type(c_ptr), value :: nnzC
            complex(c_float_complex), value :: tol
        end function hipsparseCnnz_compress

        function hipsparseZnnz_compress(handle, m, descrA, csrValA, csrRowPtrA, &
                nnzPerRow, nnzC, tol) &
                bind(c, name = 'hipsparseZnnz_compress')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZnnz_compress
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), value :: nnzPerRow
            type(c_ptr), value :: nnzC
            complex(c_double_complex), value :: tol
        end function hipsparseZnnz_compress

!       hipsparseXcsr2coo
        function hipsparseXcsr2coo(handle, csrRowPtr, nnz, m, cooRowInd, idxBase) &
                bind(c, name = 'hipsparseXcsr2coo')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcsr2coo
            type(c_ptr), value :: handle
            type(c_ptr), intent(in), value :: csrRowPtr
            integer(c_int), value :: nnz
            integer(c_int), value :: m
            type(c_ptr), value :: cooRowInd
            integer(c_int), value :: idxBase
        end function hipsparseXcsr2coo

!       hipsparseXcsr2csc
        function hipsparseScsr2csc(handle, m, n, nnz, csrVal, csrRowPtr, csrColInd, &
                cscVal, cscRowInd, cscColPtr, copyValues, idxBase) &
                bind(c, name = 'hipsparseScsr2csc')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsr2csc
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: cscVal
            type(c_ptr), value :: cscRowInd
            type(c_ptr), value :: cscColPtr
            integer(c_int), value :: copyValues
            integer(c_int), value :: idxBase
        end function hipsparseScsr2csc

        function hipsparseDcsr2csc(handle, m, n, nnz, csrVal, csrRowPtr, csrColInd, &
                cscVal, cscRowInd, cscColPtr, copyValues, idxBase) &
                bind(c, name = 'hipsparseDcsr2csc')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsr2csc
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: cscVal
            type(c_ptr), value :: cscRowInd
            type(c_ptr), value :: cscColPtr
            integer(c_int), value :: copyValues
            integer(c_int), value :: idxBase
        end function hipsparseDcsr2csc

        function hipsparseCcsr2csc(handle, m, n, nnz, csrVal, csrRowPtr, csrColInd, &
                cscVal, cscRowInd, cscColPtr, copyValues, idxBase) &
                bind(c, name = 'hipsparseCcsr2csc')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsr2csc
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: cscVal
            type(c_ptr), value :: cscRowInd
            type(c_ptr), value :: cscColPtr
            integer(c_int), value :: copyValues
            integer(c_int), value :: idxBase
        end function hipsparseCcsr2csc

        function hipsparseZcsr2csc(handle, m, n, nnz, csrVal, csrRowPtr, csrColInd, &
                cscVal, cscRowInd, cscColPtr, copyValues, idxBase) &
                bind(c, name = 'hipsparseZcsr2csc')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsr2csc
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: csrVal
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: cscVal
            type(c_ptr), value :: cscRowInd
            type(c_ptr), value :: cscColPtr
            integer(c_int), value :: copyValues
            integer(c_int), value :: idxBase
        end function hipsparseZcsr2csc

!       hipsparseXcsr2hyb
        function hipsparseScsr2hyb(handle, m, n, descrA, csrValA, csrRowPtrA, &
                csrColIndA, hybA, userEllWidth, partitionType) &
                bind(c, name = 'hipsparseScsr2hyb')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsr2hyb
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), value :: hybA
            integer(c_int), value :: userEllWidth
            integer(c_int), value :: partitionType
        end function hipsparseScsr2hyb

        function hipsparseDcsr2hyb(handle, m, n, descrA, csrValA, csrRowPtrA, &
                csrColIndA, hybA, userEllWidth, partitionType) &
                bind(c, name = 'hipsparseDcsr2hyb')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsr2hyb
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), value :: hybA
            integer(c_int), value :: userEllWidth
            integer(c_int), value :: partitionType
        end function hipsparseDcsr2hyb

        function hipsparseCcsr2hyb(handle, m, n, descrA, csrValA, csrRowPtrA, &
                csrColIndA, hybA, userEllWidth, partitionType) &
                bind(c, name = 'hipsparseCcsr2hyb')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsr2hyb
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), value :: hybA
            integer(c_int), value :: userEllWidth
            integer(c_int), value :: partitionType
        end function hipsparseCcsr2hyb

        function hipsparseZcsr2hyb(handle, m, n, descrA, csrValA, csrRowPtrA, &
                csrColIndA, hybA, userEllWidth, partitionType) &
                bind(c, name = 'hipsparseZcsr2hyb')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsr2hyb
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), value :: hybA
            integer(c_int), value :: userEllWidth
            integer(c_int), value :: partitionType
        end function hipsparseZcsr2hyb

!     hipsparseXgebsr2gebsc_bufferSize
        function hipsparseSgebsr2gebsc_bufferSize( &
        handle, &
        mb,&
        nb, &
        nnzb, &
        bsr_val, &
        bsr_row_ptr, &
        bsr_col_ind, &
        row_block_dim, &
        col_block_dim, &
        p_buffer_size) &
            bind(c, name = 'hipsparseSgebsr2gebsc_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseSgebsr2gebsc_bufferSize

            type(c_ptr), value :: handle
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: bsr_val
            type(c_ptr), intent(in), value :: bsr_row_ptr
            type(c_ptr), intent(in), value :: bsr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), value :: p_buffer_size
        end function hipsparseSgebsr2gebsc_bufferSize

        function hipsparseDgebsr2gebsc_bufferSize( &
        handle, &
        mb,&
        nb, &
        nnzb, &
        bsr_val, &
        bsr_row_ptr, &
        bsr_col_ind, &
        row_block_dim, &
        col_block_dim, &
        p_buffer_size) &
            bind(c, name = 'hipsparseDgebsr2gebsc_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseDgebsr2gebsc_bufferSize

            type(c_ptr), value :: handle
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: bsr_val
            type(c_ptr), intent(in), value :: bsr_row_ptr
            type(c_ptr), intent(in), value :: bsr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), value :: p_buffer_size
        end function hipsparseDgebsr2gebsc_bufferSize

        function hipsparseCgebsr2gebsc_bufferSize( &
        handle, &
        mb,&
        nb, &
        nnzb, &
        bsr_val, &
        bsr_row_ptr, &
        bsr_col_ind, &
        row_block_dim, &
        col_block_dim, &
        p_buffer_size) &
            bind(c, name = 'hipsparseCgebsr2gebsc_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseCgebsr2gebsc_bufferSize

            type(c_ptr), value :: handle
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: bsr_val
            type(c_ptr), intent(in), value :: bsr_row_ptr
            type(c_ptr), intent(in), value :: bsr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), value :: p_buffer_size
        end function hipsparseCgebsr2gebsc_bufferSize

        function hipsparseZgebsr2gebsc_bufferSize( &
        handle, &
        mb,&
        nb, &
        nnzb, &
        bsr_val, &
        bsr_row_ptr, &
        bsr_col_ind, &
        row_block_dim, &
        col_block_dim, &
        p_buffer_size) &
            bind(c, name = 'hipsparseZgebsr2gebsc_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseZgebsr2gebsc_bufferSize

            type(c_ptr), value :: handle
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: bsr_val
            type(c_ptr), intent(in), value :: bsr_row_ptr
            type(c_ptr), intent(in), value :: bsr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), value :: p_buffer_size
        end function hipsparseZgebsr2gebsc_bufferSize





        function hipsparseSgebsr2gebsc( &
        handle, &
        mb,&
        nb, &
        nnzb, &
        bsr_val, &
        bsr_row_ptr, &
        bsr_col_ind, &
        row_block_dim, &
        col_block_dim, &
        bsc_val, &
        bsc_row_ind, &
        bsc_col_ptr, &
        copy_values, &
        idx_base, &
        p_buffer) &
            bind(c, name = 'hipsparseSgebsr2gebsc')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseSgebsr2gebsc

            type(c_ptr), value :: handle
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: bsr_val
            type(c_ptr), intent(in), value :: bsr_row_ptr
            type(c_ptr), intent(in), value :: bsr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), intent(in), value :: bsc_val
            type(c_ptr), intent(in), value :: bsc_row_ind
            type(c_ptr), intent(in), value :: bsc_col_ptr
            integer(c_int), value :: copy_values
            integer(c_int), value :: idx_base
            type(c_ptr), intent(in), value :: p_buffer
        end function hipsparseSgebsr2gebsc

        function hipsparseDgebsr2gebsc( &
        handle, &
        mb,&
        nb, &
        nnzb, &
        bsr_val, &
        bsr_row_ptr, &
        bsr_col_ind, &
        row_block_dim, &
        col_block_dim, &
        bsc_val, &
        bsc_row_ind, &
        bsc_col_ptr, &
        copy_values, &
        idx_base, &
        p_buffer) &
            bind(c, name = 'hipsparseDgebsr2gebsc')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseDgebsr2gebsc

            type(c_ptr), value :: handle
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: bsr_val
            type(c_ptr), intent(in), value :: bsr_row_ptr
            type(c_ptr), intent(in), value :: bsr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), intent(in), value :: bsc_val
            type(c_ptr), intent(in), value :: bsc_row_ind
            type(c_ptr), intent(in), value :: bsc_col_ptr
            integer(c_int), value :: copy_values
            integer(c_int), value :: idx_base
            type(c_ptr), intent(in), value :: p_buffer
        end function hipsparseDgebsr2gebsc

      
        function hipsparseCgebsr2gebsc( &
        handle, &
        mb,&
        nb, &
        nnzb, &
        bsr_val, &
        bsr_row_ptr, &
        bsr_col_ind, &
        row_block_dim, &
        col_block_dim, &
        bsc_val, &
        bsc_row_ind, &
        bsc_col_ptr, &
        copy_values, &
        idx_base, &
        p_buffer) &
            bind(c, name = 'hipsparseCgebsr2gebsc')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseCgebsr2gebsc

            type(c_ptr), value :: handle
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: bsr_val
            type(c_ptr), intent(in), value :: bsr_row_ptr
            type(c_ptr), intent(in), value :: bsr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), intent(in), value :: bsc_val
            type(c_ptr), intent(in), value :: bsc_row_ind
            type(c_ptr), intent(in), value :: bsc_col_ptr
            integer(c_int), value :: copy_values
            integer(c_int), value :: idx_base
            type(c_ptr), intent(in), value :: p_buffer
        end function hipsparseCgebsr2gebsc

        function hipsparseZgebsr2gebsc( &
        handle, &
        mb,&
        nb, &
        nnzb, &
        bsr_val, &
        bsr_row_ptr, &
        bsr_col_ind, &
        row_block_dim, &
        col_block_dim, &
        bsc_val, &
        bsc_row_ind, &
        bsc_col_ptr, &
        copy_values, &
        idx_base, &
        p_buffer) &
            bind(c, name = 'hipsparseZgebsr2gebsc')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseZgebsr2gebsc

            type(c_ptr), value :: handle
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            integer(c_int), value :: nnzb
            type(c_ptr), intent(in), value :: bsr_val
            type(c_ptr), intent(in), value :: bsr_row_ptr
            type(c_ptr), intent(in), value :: bsr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), intent(in), value :: bsc_val
            type(c_ptr), intent(in), value :: bsc_row_ind
            type(c_ptr), intent(in), value :: bsc_col_ptr
            integer(c_int), value :: copy_values
            integer(c_int), value :: idx_base
            type(c_ptr), intent(in), value :: p_buffer
        end function hipsparseZgebsr2gebsc


      



      
      
!     hipsparseXcsr2gebsr_bufferSize
        function hipsparseScsr2gebsr_bufferSize( &
                handle, &
                dir, &
                m, &
                n, &
                csr_descr, &
                csr_val, &
                csr_row_ptr, &
                csr_col_ind, &
                row_block_dim, &
                col_block_dim, &
                p_buffer_size) &
                bind(c, name = 'hipsparseScsr2gebsr_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseScsr2gebsr_bufferSize

            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: csr_descr
            type(c_ptr), intent(in), value :: csr_val
            type(c_ptr), intent(in), value :: csr_row_ptr
            type(c_ptr), intent(in), value :: csr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), value :: p_buffer_size
        end function hipsparseScsr2gebsr_bufferSize

        function hipsparseDcsr2gebsr_bufferSize( &
                handle, &
                dir, &
                m, &
                n, &
                csr_descr, &
                csr_val, &
                csr_row_ptr, &
                csr_col_ind, &
                row_block_dim, &
                col_block_dim, &
                p_buffer_size) &
                bind(c, name = 'hipsparseDcsr2gebsr_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseDcsr2gebsr_bufferSize

            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: csr_descr
            type(c_ptr), intent(in), value :: csr_val
            type(c_ptr), intent(in), value :: csr_row_ptr
            type(c_ptr), intent(in), value :: csr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), value :: p_buffer_size
        end function hipsparseDcsr2gebsr_bufferSize

        function hipsparseCcsr2gebsr_bufferSize( &
                handle, &
                dir, &
                m, &
                n, &
                csr_descr, &
                csr_val, &
                csr_row_ptr, &
                csr_col_ind, &
                row_block_dim, &
                col_block_dim, &
                p_buffer_size) &
                bind(c, name = 'hipsparseCcsr2gebsr_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseCcsr2gebsr_bufferSize

            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: csr_descr
            type(c_ptr), intent(in), value :: csr_val
            type(c_ptr), intent(in), value :: csr_row_ptr
            type(c_ptr), intent(in), value :: csr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), value :: p_buffer_size
        end function hipsparseCcsr2gebsr_bufferSize


        function hipsparseZcsr2gebsr_bufferSize( &
                handle, &
                dir, &
                m, &
                n, &
                csr_descr, &
                csr_val, &
                csr_row_ptr, &
                csr_col_ind, &
                row_block_dim, &
                col_block_dim, &
                p_buffer_size) &
                bind(c, name = 'hipsparseZcsr2gebsr_bufferSize')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseZcsr2gebsr_bufferSize

            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: csr_descr
            type(c_ptr), intent(in), value :: csr_val
            type(c_ptr), intent(in), value :: csr_row_ptr
            type(c_ptr), intent(in), value :: csr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), value :: p_buffer_size
        end function hipsparseZcsr2gebsr_bufferSize

!     hipsparseXcsr2gebsrNnz
        function hipsparseXcsr2gebsrNnz( &
                handle, &
                dir, &
                m, &
                n, &
                csr_descr, &
                csr_row_ptr, &
                csr_col_ind, &
                bsr_descr, &
                bsr_row_ptr, &
                row_block_dim, &
                col_block_dim, &
                bsr_nnz_devhost, &
                p_buffer) &
                bind(c, name = 'hipsparseXcsr2gebsrNnz')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseXcsr2gebsrNnz

            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: csr_descr
            type(c_ptr), intent(in), value :: csr_row_ptr
            type(c_ptr), intent(in), value :: csr_col_ind
            type(c_ptr), intent(in), value :: bsr_descr
            type(c_ptr), intent(in), value :: bsr_row_ptr
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), value :: bsr_nnz_devhost
            type(c_ptr), intent(in), value :: p_buffer
        end function hipsparseXcsr2gebsrNnz

!     hipsparseScsr2gebsr
        function hipsparseScsr2gebsr( &
                handle, &
                dir, &
                m, &
                n, &
                csr_descr, &
                csr_val, &
                csr_row_ptr, &
                csr_col_ind, &
                bsr_descr, &
                bsr_val, &
                bsr_row_ptr, &
                bsr_col_ind, &
                row_block_dim, &
                col_block_dim, &
                p_buffer) &
                bind(c, name = 'hipsparseScsr2gebsr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseScsr2gebsr

            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: csr_descr
            type(c_ptr), intent(in), value :: csr_val
            type(c_ptr), intent(in), value :: csr_row_ptr
            type(c_ptr), intent(in), value :: csr_col_ind
            type(c_ptr), intent(in), value :: bsr_descr
            type(c_ptr), intent(in), value :: bsr_val
            type(c_ptr), intent(in), value :: bsr_row_ptr
            type(c_ptr), intent(in), value :: bsr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), intent(in), value :: p_buffer
        end function hipsparseScsr2gebsr


!     hipsparseDcsr2gebsr
        function hipsparseDcsr2gebsr( &
                handle, &
                dir, &
                m, &
                n, &
                csr_descr, &
                csr_val, &
                csr_row_ptr, &
                csr_col_ind, &
                bsr_descr, &
                bsr_val, &
                bsr_row_ptr, &
                bsr_col_ind, &
                row_block_dim, &
                col_block_dim, &
                p_buffer) &
                bind(c, name = 'hipsparseDcsr2gebsr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseDcsr2gebsr

            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: csr_descr
            type(c_ptr), intent(in), value :: csr_val
            type(c_ptr), intent(in), value :: csr_row_ptr
            type(c_ptr), intent(in), value :: csr_col_ind
            type(c_ptr), intent(in), value :: bsr_descr
            type(c_ptr), intent(in), value :: bsr_val
            type(c_ptr), intent(in), value :: bsr_row_ptr
            type(c_ptr), intent(in), value :: bsr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), intent(in), value :: p_buffer
        end function hipsparseDcsr2gebsr


        function hipsparseCcsr2gebsr( &
                handle, &
                dir, &
                m, &
                n, &
                csr_descr, &
                csr_val, &
                csr_row_ptr, &
                csr_col_ind, &
                bsr_descr, &
                bsr_val, &
                bsr_row_ptr, &
                bsr_col_ind, &
                row_block_dim, &
                col_block_dim, &
                p_buffer) &
                bind(c, name = 'hipsparseCcsr2gebsr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseCcsr2gebsr

            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: csr_descr
            type(c_ptr), intent(in), value :: csr_val
            type(c_ptr), intent(in), value :: csr_row_ptr
            type(c_ptr), intent(in), value :: csr_col_ind
            type(c_ptr), intent(in), value :: bsr_descr
            type(c_ptr), intent(in), value :: bsr_val
            type(c_ptr), intent(in), value :: bsr_row_ptr
            type(c_ptr), intent(in), value :: bsr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), intent(in), value :: p_buffer
        end function hipsparseCcsr2gebsr

        function hipsparseZcsr2gebsr( &
                handle, &
                dir, &
                m, &
                n, &
                csr_descr, &
                csr_val, &
                csr_row_ptr, &
                csr_col_ind, &
                bsr_descr, &
                bsr_val, &
                bsr_row_ptr, &
                bsr_col_ind, &
                row_block_dim, &
                col_block_dim, &
                p_buffer) &
                bind(c, name = 'hipsparseZcsr2gebsr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) &
            :: hipsparseZcsr2gebsr

            type(c_ptr), value :: handle
            integer(c_int), value :: dir
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: csr_descr
            type(c_ptr), intent(in), value :: csr_val
            type(c_ptr), intent(in), value :: csr_row_ptr
            type(c_ptr), intent(in), value :: csr_col_ind
            type(c_ptr), intent(in), value :: bsr_descr
            type(c_ptr), intent(in), value :: bsr_val
            type(c_ptr), intent(in), value :: bsr_row_ptr
            type(c_ptr), intent(in), value :: bsr_col_ind
            integer(c_int), value :: row_block_dim
            integer(c_int), value :: col_block_dim
            type(c_ptr), intent(in), value :: p_buffer
        end function hipsparseZcsr2gebsr
      
      
!       hipsparseXcsr2bsrNnz
        function hipsparseXcsr2bsrNnz(handle, dirA, m, n, descrA, csrRowPtrA, &
                csrColIndA, blockDim, descrC, bsrRowPtrC, bsrNnzb) &
                bind(c, name = 'hipsparseXcsr2bsrNnz')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcsr2bsrNnz
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: bsrRowPtrC
            type(c_ptr), value :: bsrNnzb
        end function hipsparseXcsr2bsrNnz

!       hipsparseXcsr2bsr
        function hipsparseScsr2bsr(handle, dirA, m, n, descrA, csrValA, csrRowPtrA, &
                csrColIndA, blockDim, descrC, bsrValC, bsrRowPtrC, bsrColIndC) &
                bind(c, name = 'hipsparseScsr2bsr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsr2bsr
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: bsrValC
            type(c_ptr), value :: bsrRowPtrC
            type(c_ptr), value :: bsrColIndC
        end function hipsparseScsr2bsr

        function hipsparseDcsr2bsr(handle, dirA, m, n, descrA, csrValA, csrRowPtrA, &
                csrColIndA, blockDim, descrC, bsrValC, bsrRowPtrC, bsrColIndC) &
                bind(c, name = 'hipsparseDcsr2bsr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsr2bsr
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: bsrValC
            type(c_ptr), value :: bsrRowPtrC
            type(c_ptr), value :: bsrColIndC
        end function hipsparseDcsr2bsr

        function hipsparseCcsr2bsr(handle, dirA, m, n, descrA, csrValA, csrRowPtrA, &
                csrColIndA, blockDim, descrC, bsrValC, bsrRowPtrC, bsrColIndC) &
                bind(c, name = 'hipsparseCcsr2bsr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsr2bsr
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: bsrValC
            type(c_ptr), value :: bsrRowPtrC
            type(c_ptr), value :: bsrColIndC
        end function hipsparseCcsr2bsr

        function hipsparseZcsr2bsr(handle, dirA, m, n, descrA, csrValA, csrRowPtrA, &
                csrColIndA, blockDim, descrC, bsrValC, bsrRowPtrC, bsrColIndC) &
                bind(c, name = 'hipsparseZcsr2bsr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsr2bsr
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrRowPtrA
            type(c_ptr), intent(in), value :: csrColIndA
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: bsrValC
            type(c_ptr), value :: bsrRowPtrC
            type(c_ptr), value :: bsrColIndC
        end function hipsparseZcsr2bsr

!       hipsparseXbsr2csr
        function hipsparseSbsr2csr(handle, dirA, mb, nb, descrA, bsrValA, bsrRowPtrA, &
                bsrColIndA, blockDim, descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseSbsr2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSbsr2csr
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: bsrValA
            type(c_ptr), intent(in), value :: bsrRowPtrA
            type(c_ptr), intent(in), value :: bsrColIndA
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseSbsr2csr

        function hipsparseDbsr2csr(handle, dirA, mb, nb, descrA, bsrValA, bsrRowPtrA, &
                bsrColIndA, blockDim, descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseDbsr2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDbsr2csr
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: bsrValA
            type(c_ptr), intent(in), value :: bsrRowPtrA
            type(c_ptr), intent(in), value :: bsrColIndA
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseDbsr2csr

        function hipsparseCbsr2csr(handle, dirA, mb, nb, descrA, bsrValA, bsrRowPtrA, &
                bsrColIndA, blockDim, descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseCbsr2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCbsr2csr
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: bsrValA
            type(c_ptr), intent(in), value :: bsrRowPtrA
            type(c_ptr), intent(in), value :: bsrColIndA
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseCbsr2csr

        function hipsparseZbsr2csr(handle, dirA, mb, nb, descrA, bsrValA, bsrRowPtrA, &
                bsrColIndA, blockDim, descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseZbsr2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZbsr2csr
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: bsrValA
            type(c_ptr), intent(in), value :: bsrRowPtrA
            type(c_ptr), intent(in), value :: bsrColIndA
            integer(c_int), value :: blockDim
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseZbsr2csr



!       hipsparseXgebsr2csr
        function hipsparseSgebsr2csr(handle, dirA, mb, nb, descrA, bsrValA, bsrRowPtrA, &
                bsrColIndA, rowBlockDim, colBlockDim,descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseSgebsr2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseSgebsr2csr
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: bsrValA
            type(c_ptr), intent(in), value :: bsrRowPtrA
            type(c_ptr), intent(in), value :: bsrColIndA
            integer(c_int), value :: rowBlockDim
            integer(c_int), value :: colBlockDim
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseSgebsr2csr

        function hipsparseDgebsr2csr(handle, dirA, mb, nb, descrA, bsrValA, bsrRowPtrA, &
                bsrColIndA, rowBlockDim, colBlockDim,descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseDgebsr2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDgebsr2csr
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: bsrValA
            type(c_ptr), intent(in), value :: bsrRowPtrA
            type(c_ptr), intent(in), value :: bsrColIndA
            integer(c_int), value :: rowBlockDim
            integer(c_int), value :: colBlockDim
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseDgebsr2csr

        function hipsparseCgebsr2csr(handle, dirA, mb, nb, descrA, bsrValA, bsrRowPtrA, &
                bsrColIndA, rowBlockDim, colBlockDim,descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseCgebsr2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCgebsr2csr
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: bsrValA
            type(c_ptr), intent(in), value :: bsrRowPtrA
            type(c_ptr), intent(in), value :: bsrColIndA
            integer(c_int), value :: rowBlockDim
            integer(c_int), value :: colBlockDim
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseCgebsr2csr

        function hipsparseZgebsr2csr(handle, dirA, mb, nb, descrA, bsrValA, bsrRowPtrA, &
                bsrColIndA, rowBlockDim, colBlockDim,descrC, csrValC, csrRowPtrC, csrColIndC) &
                bind(c, name = 'hipsparseZgebsr2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZgebsr2csr
            type(c_ptr), value :: handle
            integer(c_int), value :: dirA
            integer(c_int), value :: mb
            integer(c_int), value :: nb
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: bsrValA
            type(c_ptr), intent(in), value :: bsrRowPtrA
            type(c_ptr), intent(in), value :: bsrColIndA
            integer(c_int), value :: rowBlockDim
            integer(c_int), value :: colBlockDim
            type(c_ptr), intent(in), value :: descrC
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrRowPtrC
            type(c_ptr), value :: csrColIndC
        end function hipsparseZgebsr2csr

      

      
!       hipsparseXcsr2csr_compress
        function hipsparseScsr2csr_compress(handle, m, n, descrA, csrValA, csrColIndA, &
                csrRowPtrA, nnzA, nnzPerRow, csrValC, csrColIndC, csrRowPtrC, tol) &
                bind(c, name = 'hipsparseScsr2csr_compress')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseScsr2csr_compress
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: csrRowPtrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: nnzPerRow
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrColIndC
            type(c_ptr), value :: csrRowPtrC
            real(c_float), value :: tol
        end function hipsparseScsr2csr_compress

        function hipsparseDcsr2csr_compress(handle, m, n, descrA, csrValA, csrColIndA, &
                csrRowPtrA, nnzA, nnzPerRow, csrValC, csrColIndC, csrRowPtrC, tol) &
                bind(c, name = 'hipsparseDcsr2csr_compress')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDcsr2csr_compress
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: csrRowPtrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: nnzPerRow
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrColIndC
            type(c_ptr), value :: csrRowPtrC
            real(c_double), value :: tol
        end function hipsparseDcsr2csr_compress

        function hipsparseCcsr2csr_compress(handle, m, n, descrA, csrValA, csrColIndA, &
                csrRowPtrA, nnzA, nnzPerRow, csrValC, csrColIndC, csrRowPtrC, tol) &
                bind(c, name = 'hipsparseCcsr2csr_compress')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCcsr2csr_compress
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: csrRowPtrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: nnzPerRow
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrColIndC
            type(c_ptr), value :: csrRowPtrC
            complex(c_float_complex), value :: tol
        end function hipsparseCcsr2csr_compress

        function hipsparseZcsr2csr_compress(handle, m, n, descrA, csrValA, csrColIndA, &
                csrRowPtrA, nnzA, nnzPerRow, csrValC, csrColIndC, csrRowPtrC, tol) &
                bind(c, name = 'hipsparseZcsr2csr_compress')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZcsr2csr_compress
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: csrValA
            type(c_ptr), intent(in), value :: csrColIndA
            type(c_ptr), intent(in), value :: csrRowPtrA
            integer(c_int), value :: nnzA
            type(c_ptr), intent(in), value :: nnzPerRow
            type(c_ptr), value :: csrValC
            type(c_ptr), value :: csrColIndC
            type(c_ptr), value :: csrRowPtrC
            complex(c_double_complex), value :: tol
        end function hipsparseZcsr2csr_compress

!       hipsparseXhyb2csr
        function hipsparseShyb2csr(handle, descrA, hybA, csrValA, csrRowPtrA, &
                csrColIndA) &
                bind(c, name = 'hipsparseShyb2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseShyb2csr
            type(c_ptr), value :: handle
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: hybA
            type(c_ptr), value :: csrValA
            type(c_ptr), value :: csrRowPtrA
            type(c_ptr), value :: csrColIndA
        end function hipsparseShyb2csr

        function hipsparseDhyb2csr(handle, descrA, hybA, csrValA, csrRowPtrA, &
                csrColIndA) &
                bind(c, name = 'hipsparseDhyb2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseDhyb2csr
            type(c_ptr), value :: handle
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: hybA
            type(c_ptr), value :: csrValA
            type(c_ptr), value :: csrRowPtrA
            type(c_ptr), value :: csrColIndA
        end function hipsparseDhyb2csr

        function hipsparseChyb2csr(handle, descrA, hybA, csrValA, csrRowPtrA, &
                csrColIndA) &
                bind(c, name = 'hipsparseChyb2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseChyb2csr
            type(c_ptr), value :: handle
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: hybA
            type(c_ptr), value :: csrValA
            type(c_ptr), value :: csrRowPtrA
            type(c_ptr), value :: csrColIndA
        end function hipsparseChyb2csr

        function hipsparseZhyb2csr(handle, descrA, hybA, csrValA, csrRowPtrA, &
                csrColIndA) &
                bind(c, name = 'hipsparseZhyb2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseZhyb2csr
            type(c_ptr), value :: handle
            type(c_ptr), intent(in), value :: descrA
            type(c_ptr), intent(in), value :: hybA
            type(c_ptr), value :: csrValA
            type(c_ptr), value :: csrRowPtrA
            type(c_ptr), value :: csrColIndA
        end function hipsparseZhyb2csr

!       hipsparseXcoo2csr
        function hipsparseXcoo2csr(handle, cooRowInd, nnz, m, csrRowPtr, idxBase) &
                bind(c, name = 'hipsparseXcoo2csr')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcoo2csr
            type(c_ptr), value :: handle
            type(c_ptr), intent(in), value :: cooRowInd
            integer(c_int), value :: nnz
            integer(c_int), value :: m
            type(c_ptr), value :: csrRowPtr
            integer(c_int), value :: idxBase
        end function hipsparseXcoo2csr

!       hipsparseCreateIdentityPermutation
        function hipsparseCreateIdentityPermutation(handle, n, p) &
                bind(c, name = 'hipsparseCreateIdentityPermutation')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseCreateIdentityPermutation
            type(c_ptr), value :: handle
            integer(c_int), value :: n
            type(c_ptr), value :: p
        end function hipsparseCreateIdentityPermutation

!       hipsparseXcsrsort_bufferSizeExt
        function hipsparseXcsrsort_bufferSizeExt(handle, m, n, nnz, csrRowPtr, &
                csrColInd, bufferSize) &
                bind(c, name = 'hipsparseXcsrsort_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcsrsort_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), intent(in), value :: csrColInd
            type(c_ptr), value :: bufferSize
        end function hipsparseXcsrsort_bufferSizeExt

!       hipsparseXcsrsort
        function hipsparseXcsrsort(handle, m, n, nnz, descr, csrRowPtr, csrColInd, &
                perm, buffer) &
                bind(c, name = 'hipsparseXcsrsort')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcsrsort
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: csrRowPtr
            type(c_ptr), value :: csrColInd
            type(c_ptr), value :: perm
            type(c_ptr), value :: buffer
        end function hipsparseXcsrsort

!       hipsparseXcscsort_bufferSizeExt
        function hipsparseXcscsort_bufferSizeExt(handle, m, n, nnz, cscRowPtr, &
                cscColInd, bufferSize) &
                bind(c, name = 'hipsparseXcscsort_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcscsort_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: cscRowPtr
            type(c_ptr), intent(in), value :: cscColInd
            type(c_ptr), value :: bufferSize
        end function hipsparseXcscsort_bufferSizeExt

!       hipsparseXcscsort
        function hipsparseXcscsort(handle, m, n, nnz, descr, cscRowPtr, cscColInd, &
                perm, buffer) &
                bind(c, name = 'hipsparseXcscsort')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcscsort
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: descr
            type(c_ptr), intent(in), value :: cscRowPtr
            type(c_ptr), value :: cscColInd
            type(c_ptr), value :: perm
            type(c_ptr), value :: buffer
        end function hipsparseXcscsort

!       hipsparseXcoosort_bufferSizeExt
        function hipsparseXcoosort_bufferSizeExt(handle, m, n, nnz, cooRowInd, &
                cooColInd, bufferSize) &
                bind(c, name = 'hipsparseXcoosort_bufferSizeExt')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcoosort_bufferSizeExt
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), intent(in), value :: cooRowInd
            type(c_ptr), intent(in), value :: cooColInd
            type(c_ptr), value :: bufferSize
        end function hipsparseXcoosort_bufferSizeExt

!       hipsparseXcoosortByRow
        function hipsparseXcoosortByRow(handle, m, n, nnz, cooRowInd, cooColInd, &
                perm, buffer) &
                bind(c, name = 'hipsparseXcoosortByRow')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcoosortByRow
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), value :: cooRowInd
            type(c_ptr), value :: cooColInd
            type(c_ptr), value :: perm
            type(c_ptr), value :: buffer
        end function hipsparseXcoosortByRow

!       hipsparseXcoosortByColumn
        function hipsparseXcoosortByColumn(handle, m, n, nnz, cooRowInd, cooColInd, &
                perm, buffer) &
                bind(c, name = 'hipsparseXcoosortByColumn')
            use hipsparse_enums
            use iso_c_binding
            implicit none
            integer(kind(HIPSPARSE_STATUS_SUCCESS)) :: hipsparseXcoosortByColumn
            type(c_ptr), value :: handle
            integer(c_int), value :: m
            integer(c_int), value :: n
            integer(c_int), value :: nnz
            type(c_ptr), value :: cooRowInd
            type(c_ptr), value :: cooColInd
            type(c_ptr), value :: perm
            type(c_ptr), value :: buffer
        end function hipsparseXcoosortByColumn

    end interface

end module hipsparse
