Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagelib
Path: blob/master/sage/libs/linbox/fflas.pxd
4068 views
from modular cimport ModDoubleField, ModFloatField, ModDoubleFieldElement, ModFloatFieldElement

cdef extern from "linbox/fflas/fflas.h" namespace "std":
    cdef cppclass vector[T]:
        cppclass iterator:
            T operator*()
            iterator operator++()
            bint operator==(iterator)
            bint operator!=(iterator)
        vector()
        void push_back(T&)
        T& operator[](int)
        T& at(int)
        iterator begin()
        iterator end()
        size_t size()

    cdef cppclass list[T]:
        cppclass iterator:
            T operator*()
            iterator operator++()
            bint operator==(iterator)
            bint operator!=(iterator)
        void push_back(T&)
        void pop_front()
        T& front()
        iterator begin()
        iterator end()
        size_t size()
        void clear()

cdef extern from "linbox/fflas/fflas.h":
    ctypedef enum fflas_trans_enum "LinBox::FFLAS::FFLAS_TRANSPOSE":
        fflas_no_trans  "LinBox::FFLAS::FflasNoTrans"
        fflas_trans  "LinBox::FFLAS::FflasTrans"

    ctypedef enum fflas_side_enum "LinBox::FFLAS::FFLAS_SIDE":
        fflas_right  "LinBox::FFLAS::FflasRight"

    # double
    void ModDouble_fgemv "LinBox::FFLAS::fgemv" \
            (ModDoubleField F, fflas_trans_enum transA,
                    size_t nrows, size_t ncols,
                    ModDoubleFieldElement alpha, ModDoubleFieldElement* A,
                    size_t lda, ModDoubleFieldElement* X, size_t incX,
                    ModDoubleFieldElement beta, ModDoubleFieldElement* Y,
                    size_t incY)

    ModDoubleFieldElement* ModDouble_fgemm "LinBox::FFLAS::fgemm" \
            (ModDoubleField F,
                    fflas_trans_enum transA, fflas_trans_enum transB,
                    size_t nrowsA, size_t ncolsB, size_t ncolsA,
                    ModDoubleFieldElement alpha, ModDoubleFieldElement* A,
                    size_t A_stride, ModDoubleFieldElement* B, int B_stride,
                    ModDoubleFieldElement beta, ModDoubleFieldElement* C,
                    size_t C_stride)


    # float
    void ModFloat_fgemv "LinBox::FFLAS::fgemv" \
            (ModFloatField F, fflas_trans_enum transA,
                    size_t nrows, size_t ncols,
                    ModFloatFieldElement alpha, ModFloatFieldElement* A,
                    size_t lda, ModFloatFieldElement* X, size_t incX,
                    ModFloatFieldElement beta, ModFloatFieldElement* Y,
                    size_t incY)

    ModFloatFieldElement* ModFloat_fgemm "LinBox::FFLAS::fgemm" \
            (ModFloatField F,
                    fflas_trans_enum transA, fflas_trans_enum transB,
                    size_t nrowsA, size_t ncolsB, size_t ncolsA,
                    ModFloatFieldElement alpha, ModFloatFieldElement* A,
                    size_t A_stride, ModFloatFieldElement* B, int B_stride,
                    ModFloatFieldElement beta, ModFloatFieldElement* C,
                    size_t C_stride)

cdef extern from "linbox/ffpack/ffpack.h":
    # double
    bint ModDouble_is_singular "LinBox::FFPACK::IsSingular" (ModDoubleField F,
                                                             size_t nrows, size_t ncols, ModDoubleFieldElement* A,
                                                             size_t A_stride)

    ModDoubleFieldElement* ModDouble_invert_in_place "LinBox::FFPACK::Invert"  (ModDoubleField F, size_t order,
                                                                                ModDoubleFieldElement* A, size_t A_stride, int nullity)

    ModDoubleFieldElement ModDoubleDet "LinBox::FFPACK::Det" (ModDoubleField F,
                                                              size_t nrows, size_t ncols,
                                                              ModDoubleFieldElement* A, size_t A_stride)

    int ModDoubleRank "LinBox::FFPACK::Rank" (ModDoubleField,
                                              size_t nrows, size_t ncols,
                                              ModDoubleFieldElement *A, size_t lda)

    size_t ModDouble_echelon "LinBox::FFPACK::ReducedRowEchelonForm" (ModDoubleField F, size_t a, size_t b,
                                                                      ModDoubleFieldElement* matrix,
                                                                      size_t s, size_t* P, size_t* Q)
    
    void ModDouble_applyp "LinBox::FFPACK::applyP" (ModDoubleField F,
                                                    fflas_side_enum s, fflas_trans_enum tr,
                                                    size_t nr, size_t foo, size_t r,
                                                    ModDoubleFieldElement* matrix, size_t nc, size_t* Q)
    
    void ModDouble_MinPoly "LinBox::FFPACK::MinPoly" ( ModDoubleField F, 
                                                       vector[ModDoubleFieldElement] minP, size_t N,
                                                       ModDoubleFieldElement* A, size_t lda,
                                                       ModDoubleFieldElement* X, size_t ldx, size_t* P)

    void ModDouble_CharPoly "LinBox::FFPACK::CharPoly" ( ModDoubleField F, 
                                                         list[vector[ModDoubleFieldElement]] charp, size_t N,
                                                         ModDoubleFieldElement* A, size_t lda)

    # float

    bint ModFloat_is_singular "LinBox::FFPACK::IsSingular" (ModFloatField F,
                                                            size_t nrows, size_t ncols, ModFloatFieldElement* A,
                                                            size_t A_stride)

    ModFloatFieldElement* ModFloat_invert_in_place "LinBox::FFPACK::Invert" (ModFloatField F, size_t order,
                                                                             ModFloatFieldElement* A, size_t A_stride, int nullity)

    ModFloatFieldElement ModFloatDet "LinBox::FFPACK::Det" (ModFloatField F,
                                                            size_t nrows, size_t ncols,
                                                            ModFloatFieldElement* A, size_t A_stride)

    int ModFloatRank "LinBox::FFPACK::Rank" (ModFloatField,
                                             size_t nrows, size_t ncols,
                                             ModFloatFieldElement *A, size_t lda)

    size_t ModFloat_echelon "LinBox::FFPACK::ReducedRowEchelonForm" (ModFloatField F, size_t a, size_t b,
                                                                     ModFloatFieldElement* matrix,
                                                                     size_t s, size_t* P, size_t* Q)

    void ModFloat_applyp "LinBox::FFPACK::applyP" (ModFloatField F,
                                                   fflas_side_enum s, fflas_trans_enum tr,
                                                   size_t nr, size_t foo, size_t r,
                                                   ModFloatFieldElement* matrix, size_t nc, size_t* Q)

    void ModFloat_MinPoly "LinBox::FFPACK::MinPoly" ( ModFloatField F, 
                                                      vector[ModFloatFieldElement] minP, size_t N,
                                                      ModFloatFieldElement* A, size_t lda,
                                                      ModFloatFieldElement* X, size_t ldx, size_t* P)

    void ModFloat_CharPoly "LinBox::FFPACK::CharPoly" ( ModFloatField F, 
                                                        list[vector[ModFloatFieldElement]] charp, size_t N,
                                                        ModFloatFieldElement* A, size_t lda )