Am Mittwoch, 9. Juli 2014 16:18:03 UTC+2 schrieb Volker Braun: > > Python/Cython classes are not C++ classes, so you can't call Py/Cy methods > from C++ code directly. It can of course be done using the CPython C API or > Boost.Python, but a Python object is never a straight C++ object. For > starters it doesn't have a C++ vtable, methods can be added dynamically in > Python... > > The two basic patterns for Cython code are > > A) Write your implementation in Python first. Then switch py->pyx Cython. > Then identify the slow parts and cdef variables & methods as appropriate, > so that Cython can generate fast C code instead of having to call the > CPython API always. > > B) Write your implementation in C++ first, or use an existing code. Wrap > the C++ objects in Cython objects ( > http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html). In this > case you'd want to pass the raw matrix data as a pointer. > > Thank you for your response.
I am trying to go with option B, that is one of the reasons I looked at linbox code. One of the main points of my project is, that there are already wrappers for the objects I want to use (NTLs ZZ_pEX and GF2EX are already wrapped, see sage.rings.polynomial. polynomial_zz_pex.Polynomial_ZZ_pEX), and there are matrix types defined and wrapped. When I looked at linbox code (example used: echelon-form) I found the following code: int rowReducedEchelon(Matrix &E, const Matrix& A) They use references for Matrices throughout the file. These functions are specified in echelon-form.pxd cdef extern from "linbox/algorithms/echelon-form.h": cdef cppclass EchelonFormDomainDouble "LinBox::EchelonFormDomain<LinBox::Modular<double> >": EchelonFormDomainDouble(ModDoubleField) int rowReducedEchelon(BlasMatrixDouble, BlasMatrixDouble) The objects I want to use are most likely already wrapped somewhere in sage (NTL for example is a c++ library, the matrix representation I do not know at all, that is one of the problems). So it shouldn't be necessary to build my own objects and wrap them, or at least I thought so. And if I have to build my own wrappers, I'd have to make them compatible with sage internal objects, but I think that would be easier, as both are defined in cython. Regards, David -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.