On Wednesday, July 9, 2014 4:52:19 PM UTC+2, David Mödinger wrote: > > > > 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). > Beware that the NTL wrapper was written a long time ago and IIRC there was no or not good c++ support in Pyrex/Cython then, so it is written in a strange/hackish way. You'd be welcome to rewrite it with the proper c++ interface :)
> 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.