On 2013-09-25, Volker Braun <vbraun.n...@gmail.com> wrote: > A pointer to a dynamically malloc'ed array doesn't know how long the array > is. Your C library function must returns its size, too. You can then read > it out one-by-one but you can't call list(c_array) since the latter doesn't > even know how long it is.
I read somewhere that it is convenient to use numpy arrays in such a situation (they are stored intrenally as C arrays, and there are extra Python hooks kept by numpy). Not sure I can reproduce details here. > > > > On Wednesday, September 25, 2013 5:02:55 PM UTC+1, mmarco wrote: >> >> I see, thanks. >> >> So, if i understand it correctly, i import my_c_function and then, to call >> it, i create the memory space for the array, copy the data into it and pass >> the array to the function. >> >> I guess the result will be another c array that i can access from python >> in a transparent way, right? >> >> I mean, if i write: >> >> res=my_c_function(c_values) >> >> Then i can just use >> >> list(res) >> >> to get a list of floats? >> >> >> El miércoles, 25 de septiembre de 2013 13:22:51 UTC+2, Volker Braun >> escribió: >>> >>> Definitely use Cython. >>> >>> For array of doubles, say, you just need a sage/libs/my_library.pyx with >>> >>> include "stdsage.pxi" >>> >>> cdef extern from "my_library.h" >>> my_c_function(double*) >>> >>> def my_python_function(values): >>> cdef double * c_values = <double*> >>> sage_malloc(sizeof(double)*len(values)) >>> for i,v in enumerate(values): >>> c_values[i] = values[i] >>> my_c_function(c_values) >>> >>> >>> >>> >>> >>> >>> On Wednesday, September 25, 2013 10:08:24 AM UTC+1, mmarco wrote: >>>> >>>> We are working on a c library to do homotoy continuation of polynomial >>>> roots using interval arithmetic. Our idea is to make a spkg with it, and >>>> write some functions in the sage library that would use it (in particular, >>>> to compute the fundamental group of the complement of an algebraic curve). >>>> so i have a question: >>>> >>>> how should we pass the data to the library, and retrieve it back? Both >>>> the input and output can be seen as an array of mpfr reals (or, depending >>>> on the version, floats or doubles). The length of the arrays is not known >>>> a >>>> priori. >>>> >>>> Which should be the best way to go? Write our interface in cython? or >>>> use ctypes? And in any case, is there some easy tutorial that we could >>>> follow? >>>> >>>> Thanks in advance. >>>> >>> > -- 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/groups/opt_out.