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.

Reply via email to