# This code was automatically generated by CWrap version 0.0.0

cdef extern from "cscd_utils.h":

    complex cacos(complex)

    complex casin(complex)

    complex catan(complex)

    complex ccos(complex)

    complex csin(complex)

    complex ctan(complex)

    complex cacosh(complex)

    complex casinh(complex)

    complex catanh(complex)

    complex ccosh(complex)

    complex csinh(complex)

    complex ctanh(complex)

    complex cexp(complex)

    complex clog(complex)

    double cabs(complex)

    complex cpow(complex, complex)

    complex csqrt(complex)

    double carg(complex)

    double cimag(complex)

    complex conj(complex)

    complex cproj(complex)

    double creal(complex)

    complex cacosl(complex)

    complex casinl(complex)

    complex catanl(complex)

    complex ccosl(complex)

    complex csinl(complex)

    complex ctanl(complex)

    complex cacoshl(complex)

    complex casinhl(complex)

    complex catanhl(complex)

    complex ccoshl(complex)

    complex csinhl(complex)

    complex ctanhl(complex)

    complex cexpl(complex)

    complex clogl(complex)

    long double cabsl(complex)

    complex cpowl(complex, complex)

    complex csqrtl(complex)

    long double cargl(complex)

    long double cimagl(complex)

    complex conjl(complex)

    complex cprojl(complex)

    long double creall(complex)

    complex cacosf(complex)

    complex casinf(complex)

    complex catanf(complex)

    complex ccosf(complex)

    complex csinf(complex)

    complex ctanf(complex)

    complex cacoshf(complex)

    complex casinhf(complex)

    complex catanhf(complex)

    complex ccoshf(complex)

    complex csinhf(complex)

    complex ctanhf(complex)

    complex cexpf(complex)

    complex clogf(complex)

    float cabsf(complex)

    complex cpowf(complex, complex)

    complex csqrtf(complex)

    float cargf(complex)

    float cimagf(complex)

    complex conjf(complex)

    complex cprojf(complex)

    float crealf(complex)

    ctypedef int pastix_int_t

    ctypedef unsigned int pastix_uint_t

    ctypedef double pastix_float_t

    cdef enum CSCD_OPERATIONS:
        CSCD_ADD
        CSCD_KEEP
        CSCD_MAX
        CSCD_MIN
        CSCD_OVW

    ctypedef CSCD_OPERATIONS CSCD_OPERATIONS_t

    cdef enum CSC_DISPATCH_OP:
        CSC_DISP_SIMPLE
        CSC_DISP_CYCLIC

    ctypedef CSC_DISPATCH_OP CSCD_DISPATCH_OP_t

    void csc_dispatch(pastix_int_t gN, pastix_int_t *gcolptr, pastix_int_t *grow, pastix_float_t *gavals, pastix_float_t *grhs, pastix_int_t *gperm, pastix_int_t *ginvp, pastix_int_t *lN, pastix_int_t **lcolptr, pastix_int_t **lrow, pastix_float_t **lavals, pastix_float_t **lrhs, pastix_int_t **lperm, pastix_int_t **loc2glob, int dispatch, MPI_Comm pastix_comm)

    void s_csc_dispatch(pastix_int_t gN, pastix_int_t *gcolptr, pastix_int_t *grow, float *gavals, float *grhs, pastix_int_t *gperm, pastix_int_t *ginvp, pastix_int_t *lN, pastix_int_t **lcolptr, pastix_int_t **lrow, float **lavals, float **lrhs, pastix_int_t **lperm, pastix_int_t **loc2glob, int dispatch, MPI_Comm pastix_comm)

    void d_csc_dispatch(pastix_int_t gN, pastix_int_t *gcolptr, pastix_int_t *grow, double *gavals, double *grhs, pastix_int_t *gperm, pastix_int_t *ginvp, pastix_int_t *lN, pastix_int_t **lcolptr, pastix_int_t **lrow, double **lavals, double **lrhs, pastix_int_t **lperm, pastix_int_t **loc2glob, int dispatch, MPI_Comm pastix_comm)

    void c_csc_dispatch(pastix_int_t gN, pastix_int_t *gcolptr, pastix_int_t *grow, complex *gavals, complex *grhs, pastix_int_t *gperm, pastix_int_t *ginvp, pastix_int_t *lN, pastix_int_t **lcolptr, pastix_int_t **lrow, complex **lavals, complex **lrhs, pastix_int_t **lperm, pastix_int_t **loc2glob, int dispatch, MPI_Comm pastix_comm)

    void z_csc_dispatch(pastix_int_t gN, pastix_int_t *gcolptr, pastix_int_t *grow, complex *gavals, complex *grhs, pastix_int_t *gperm, pastix_int_t *ginvp, pastix_int_t *lN, pastix_int_t **lcolptr, pastix_int_t **lrow, complex **lavals, complex **lrhs, pastix_int_t **lperm, pastix_int_t **loc2glob, int dispatch, MPI_Comm pastix_comm)

    pastix_int_t csc_cyclic_distribution(pastix_int_t column, pastix_int_t columnnbr, MPI_Comm pastix_comm)

    pastix_int_t s_csc_cyclic_distribution(pastix_int_t column, pastix_int_t columnnbr, MPI_Comm pastix_comm)

    pastix_int_t d_csc_cyclic_distribution(pastix_int_t column, pastix_int_t columnnbr, MPI_Comm pastix_comm)

    pastix_int_t c_csc_cyclic_distribution(pastix_int_t column, pastix_int_t columnnbr, MPI_Comm pastix_comm)

    pastix_int_t z_csc_cyclic_distribution(pastix_int_t column, pastix_int_t columnnbr, MPI_Comm pastix_comm)

    pastix_int_t csc_simple_distribution(pastix_int_t column, pastix_int_t columnnbr, MPI_Comm pastix_comm)

    pastix_int_t s_csc_simple_distribution(pastix_int_t column, pastix_int_t columnnbr, MPI_Comm pastix_comm)

    pastix_int_t d_csc_simple_distribution(pastix_int_t column, pastix_int_t columnnbr, MPI_Comm pastix_comm)

    pastix_int_t c_csc_simple_distribution(pastix_int_t column, pastix_int_t columnnbr, MPI_Comm pastix_comm)

    pastix_int_t z_csc_simple_distribution(pastix_int_t column, pastix_int_t columnnbr, MPI_Comm pastix_comm)

    int cscd_symgraph(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, pastix_float_t *a, pastix_int_t *newn, pastix_int_t **newia, pastix_int_t **newja, pastix_float_t **newa, pastix_int_t *l2g, MPI_Comm comm)

    int s_cscd_symgraph(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, float *a, pastix_int_t *newn, pastix_int_t **newia, pastix_int_t **newja, float **newa, pastix_int_t *l2g, MPI_Comm comm)

    int d_cscd_symgraph(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, float *a, pastix_int_t *newn, pastix_int_t **newia, pastix_int_t **newja, float **newa, pastix_int_t *l2g, MPI_Comm comm)

    int c_cscd_symgraph(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, float *a, pastix_int_t *newn, pastix_int_t **newia, pastix_int_t **newja, float **newa, pastix_int_t *l2g, MPI_Comm comm)

    int z_cscd_symgraph(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, float *a, pastix_int_t *newn, pastix_int_t **newia, pastix_int_t **newja, float **newa, pastix_int_t *l2g, MPI_Comm comm)

    int cscd_addlocal(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, pastix_float_t *a, pastix_int_t *l2g, pastix_int_t addn, pastix_int_t *addia, pastix_int_t *addja, pastix_float_t *adda, pastix_int_t *addl2g, pastix_int_t *newn, pastix_int_t **newia, pastix_int_t **newja, pastix_float_t **newa, CSCD_OPERATIONS_t OP, int dof)

    int s_cscd_addlocal(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, float *a, pastix_int_t *l2g, pastix_int_t addn, pastix_int_t *addia, pastix_int_t *addja, float *adda, pastix_int_t *addl2g, pastix_int_t *newn, pastix_int_t **newia, pastix_int_t **newja, float **newa, CSCD_OPERATIONS_t OP, int dof)

    int d_cscd_addlocal(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, double *a, pastix_int_t *l2g, pastix_int_t addn, pastix_int_t *addia, pastix_int_t *addja, double *adda, pastix_int_t *addl2g, pastix_int_t *newn, pastix_int_t **newia, pastix_int_t **newja, double **newa, CSCD_OPERATIONS_t OP, int dof)

    int c_cscd_addlocal(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, complex *a, pastix_int_t *l2g, pastix_int_t addn, pastix_int_t *addia, pastix_int_t *addja, complex *adda, pastix_int_t *addl2g, pastix_int_t *newn, pastix_int_t **newia, pastix_int_t **newja, complex **newa, CSCD_OPERATIONS_t OP, int dof)

    int z_cscd_addlocal(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, complex *a, pastix_int_t *l2g, pastix_int_t addn, pastix_int_t *addia, pastix_int_t *addja, complex *adda, pastix_int_t *addl2g, pastix_int_t *newn, pastix_int_t **newia, pastix_int_t **newja, complex **newa, CSCD_OPERATIONS_t OP, int dof)

    void csc2cscd(pastix_int_t gN, pastix_int_t *gcolptr, pastix_int_t *grow, pastix_float_t *gavals, pastix_float_t *grhs, pastix_int_t *gperm, pastix_int_t *ginvp, pastix_int_t lN, pastix_int_t **lcolptr, pastix_int_t **lrow, pastix_float_t **lavals, pastix_float_t **lrhs, pastix_int_t **lperm, pastix_int_t **linvp, pastix_int_t *loc2glob)

    void s_csc2cscd(pastix_int_t gN, pastix_int_t *gcolptr, pastix_int_t *grow, float *gavals, float *grhs, pastix_int_t *gperm, pastix_int_t *ginvp, pastix_int_t lN, pastix_int_t **lcolptr, pastix_int_t **lrow, float **lavals, float **lrhs, pastix_int_t **lperm, pastix_int_t **linvp, pastix_int_t *loc2glob)

    void d_csc2cscd(pastix_int_t gN, pastix_int_t *gcolptr, pastix_int_t *grow, double *gavals, double *grhs, pastix_int_t *gperm, pastix_int_t *ginvp, pastix_int_t lN, pastix_int_t **lcolptr, pastix_int_t **lrow, double **lavals, double **lrhs, pastix_int_t **lperm, pastix_int_t **linvp, pastix_int_t *loc2glob)

    void c_csc2cscd(pastix_int_t gN, pastix_int_t *gcolptr, pastix_int_t *grow, complex *gavals, complex *grhs, pastix_int_t *gperm, pastix_int_t *ginvp, pastix_int_t lN, pastix_int_t **lcolptr, pastix_int_t **lrow, complex **lavals, complex **lrhs, pastix_int_t **lperm, pastix_int_t **linvp, pastix_int_t *loc2glob)

    void z_csc2cscd(pastix_int_t gN, pastix_int_t *gcolptr, pastix_int_t *grow, complex *gavals, complex *grhs, pastix_int_t *gperm, pastix_int_t *ginvp, pastix_int_t lN, pastix_int_t **lcolptr, pastix_int_t **lrow, complex **lavals, complex **lrhs, pastix_int_t **lperm, pastix_int_t **linvp, pastix_int_t *loc2glob)

    void cscd2csc(pastix_int_t lN, pastix_int_t *lcolptr, pastix_int_t *lrow, pastix_float_t *lavals, pastix_float_t *lrhs, pastix_int_t *lperm, pastix_int_t *linvp, pastix_int_t *gN, pastix_int_t **gcolptr, pastix_int_t **grow, pastix_float_t **gavals, pastix_float_t **grhs, pastix_int_t **gperm, pastix_int_t **ginvp, pastix_int_t *loc2glob, MPI_Comm pastix_comm, pastix_int_t ndof)

    void s_cscd2csc(pastix_int_t lN, pastix_int_t *lcolptr, pastix_int_t *lrow, float *lavals, float *lrhs, pastix_int_t *lperm, pastix_int_t *linvp, pastix_int_t *gN, pastix_int_t **gcolptr, pastix_int_t **grow, float **gavals, float **grhs, pastix_int_t **gperm, pastix_int_t **ginvp, pastix_int_t *loc2glob, MPI_Comm pastix_comm, pastix_int_t ndof)

    void d_cscd2csc(pastix_int_t lN, pastix_int_t *lcolptr, pastix_int_t *lrow, double *lavals, double *lrhs, pastix_int_t *lperm, pastix_int_t *linvp, pastix_int_t *gN, pastix_int_t **gcolptr, pastix_int_t **grow, double **gavals, double **grhs, pastix_int_t **gperm, pastix_int_t **ginvp, pastix_int_t *loc2glob, MPI_Comm pastix_comm, pastix_int_t ndof)

    void c_cscd2csc(pastix_int_t lN, pastix_int_t *lcolptr, pastix_int_t *lrow, complex *lavals, complex *lrhs, pastix_int_t *lperm, pastix_int_t *linvp, pastix_int_t *gN, pastix_int_t **gcolptr, pastix_int_t **grow, complex **gavals, complex **grhs, pastix_int_t **gperm, pastix_int_t **ginvp, pastix_int_t *loc2glob, MPI_Comm pastix_comm, pastix_int_t ndof)

    void z_cscd2csc(pastix_int_t lN, pastix_int_t *lcolptr, pastix_int_t *lrow, complex *lavals, complex *lrhs, pastix_int_t *lperm, pastix_int_t *linvp, pastix_int_t *gN, pastix_int_t **gcolptr, pastix_int_t **grow, complex **gavals, complex **grhs, pastix_int_t **gperm, pastix_int_t **ginvp, pastix_int_t *loc2glob, MPI_Comm pastix_comm, pastix_int_t ndof)

    int cscd_redispatch(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, pastix_float_t *a, pastix_float_t *rhs, pastix_int_t nrhs, pastix_int_t *l2g, pastix_int_t dn, pastix_int_t **dia, pastix_int_t **dja, pastix_float_t **da, pastix_float_t **drhs, pastix_int_t *dl2g, MPI_Comm comm, pastix_int_t dof)

    int s_cscd_redispatch(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, float *a, float *rhs, pastix_int_t nrhs, pastix_int_t *l2g, pastix_int_t dn, pastix_int_t **dia, pastix_int_t **dja, float **da, float **drhs, pastix_int_t *dl2g, MPI_Comm comm, pastix_int_t dof)

    int d_cscd_redispatch(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, double *a, double *rhs, pastix_int_t nrhs, pastix_int_t *l2g, pastix_int_t dn, pastix_int_t **dia, pastix_int_t **dja, double **da, double **drhs, pastix_int_t *dl2g, MPI_Comm comm, pastix_int_t dof)

    int c_cscd_redispatch(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, complex *a, complex *rhs, pastix_int_t nrhs, pastix_int_t *l2g, pastix_int_t dn, pastix_int_t **dia, pastix_int_t **dja, complex **da, complex **drhs, pastix_int_t *dl2g, MPI_Comm comm, pastix_int_t dof)

    int z_cscd_redispatch(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, complex *a, complex *rhs, pastix_int_t nrhs, pastix_int_t *l2g, pastix_int_t dn, pastix_int_t **dia, pastix_int_t **dja, complex **da, complex **drhs, pastix_int_t *dl2g, MPI_Comm comm, pastix_int_t dof)

    int cscd_save(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, pastix_float_t *a, pastix_float_t *rhs, pastix_int_t *l2g, int dof, const char *filename, MPI_Comm comm)

    int s_cscd_save(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, float *a, float *rhs, pastix_int_t *l2g, int dof, const char *filename, MPI_Comm comm)

    int d_cscd_save(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, double *a, double *rhs, pastix_int_t *l2g, int dof, const char *filename, MPI_Comm comm)

    int c_cscd_save(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, complex *a, complex *rhs, pastix_int_t *l2g, int dof, const char *filename, MPI_Comm comm)

    int z_cscd_save(pastix_int_t n, pastix_int_t *ia, pastix_int_t *ja, complex *a, complex *rhs, pastix_int_t *l2g, int dof, const char *filename, MPI_Comm comm)

    int cscd_load(pastix_int_t *n, pastix_int_t **ia, pastix_int_t **ja, pastix_float_t **a, pastix_float_t **rhs, pastix_int_t **l2g, const char *filename, MPI_Comm mpi_comm)

    int s_cscd_load(pastix_int_t *n, pastix_int_t **ia, pastix_int_t **ja, float **a, float **rhs, pastix_int_t **l2g, const char *filename, MPI_Comm mpi_comm)

    int d_cscd_load(pastix_int_t *n, pastix_int_t **ia, pastix_int_t **ja, double **a, double **rhs, pastix_int_t **l2g, const char *filename, MPI_Comm mpi_comm)

    int c_cscd_load(pastix_int_t *n, pastix_int_t **ia, pastix_int_t **ja, complex **a, complex **rhs, pastix_int_t **l2g, const char *filename, MPI_Comm mpi_comm)

    int z_cscd_load(pastix_int_t *n, pastix_int_t **ia, pastix_int_t **ja, complex **a, complex **rhs, pastix_int_t **l2g, const char *filename, MPI_Comm mpi_comm)


