[Cython] Automatic conversion with fixed-size C arrays

Robert Bradshaw robertwb at gmail.com
Fri Jul 25 06:16:37 CEST 2014


On Thu, Jul 24, 2014 at 7:13 PM, Kurt Smith <kwmsmith at gmail.com> wrote:
>
> On Thu, Jul 24, 2014 at 2:07 PM, Robert Bradshaw <robertwb at gmail.com> wrote:
>>
>> On Fri, Jul 18, 2014 at 12:44 PM, Robert Bradshaw <robertwb at gmail.com>
>> wrote:
>> > On Fri, Jul 18, 2014 at 12:08 PM, Kurt Smith <kwmsmith at gmail.com> wrote:
>> >> On Wed, Jul 16, 2014 at 1:02 PM, Robert Bradshaw <robertwb at gmail.com>
>> >> wrote:
>> >>>
>> >>>
>> >>> Yes, this'd be nice to have. One difficulty with arrays is that they
>> >>> can't be returned by value, and so the ordinary from_py_function
>> >>> mechanism (which gets called recursively) would need to be adapted.
>> >>> (Allowing to_py_function to be optinally be called by reference
>> >>> instead of by value could be nice as well from a performance
>> >>> standpoint.)
>> >>
>> >>
>> >> OK, thanks for the pointers.  I'll put some time on this over the
>> >> weekend.
>> >> Should I just make a PR when things are ready to review, or should I
>> >> put up
>> >> an issue first?
>> >
>> > I think this thread is sufficient; looking forward to a pull request.
>>
>> Don't know if you had time to look at this yet,
>
>
> Yes, I've put in some time.  Initial focus is getting
>
>     cdef int a[10] = obj
>
> working, and then using that for structs.

Sounds good.

> Took a little while to re-orient myself with the codebase.
>
> I'm working on getting the `to_py_function` and `from_py_function`
> infrastructure to take arguments by reference; right now I'm getting
> something hacked into place, and I'd appreciate your review to point out the
> right way (or at least a better way) to do it.

from_py_function always takes its argument (a PyObject*) by reference.
It's used as an rvalue, so might not make sense for arrays.

> Will likely have a PR for you by this weekend.

Cool.

>> but another possible
>> hack would be to use the fact that struct { int x[N]; } is bit
>> compatible with int[N] and can be passed/assigned by value. E.g.
>
>
> Yes, this is a good point, although if I can get the pass-by-reference
> working for fixed-size arrays, ideally we can do the same for structs with
> array members.

Agreed.

- Robert


More information about the cython-devel mailing list