[Numpy-discussion] What's the most numpythonic way to support multiple types in a C extension?

John Salvatier jsalvati at u.washington.edu
Wed Jun 27 16:10:13 EDT 2012


Thanks nathaniel, that does tricky...

On Wed, Jun 27, 2012 at 9:25 AM, Nathaniel Smith <njs at pobox.com> wrote:

> On Tue, Jun 26, 2012 at 10:53 PM, John Salvatier
> <jsalvati at u.washington.edu> wrote:
> > I want to support multiple types in the index_increment function that
> I've
> > written here:
> >
> https://github.com/jsalvatier/numpy/blob/master/numpy/core/src/multiarray/mapping.c
> >
> > I need to check that the first argument's type can support addition, cast
> > the dataptr to the appropriate type and do the addition operation for
> that
> > type. It looks like some of the numpy code uses .c.src files to do
> > templating. Is that what I want to do here? Is the syntax described
> > somewhere?
>
> The proper way would be use the ufunc machinery, which already knows
> how to perform addition on arbitrary numpy dtypes... unfortunately
> this may be more complicated than you are hoping :-/.
>
> Since there's nothing about this operation that is specific to the
> addition operation or to the double type, I guess the ideal API would
> actually be something like, an extra method added to binary ufuncs
>  np.add.inplace_indexed(a, idx, b)
> which would be equivalent to
>  a[idx] += b
> except that duplicate indices would be handled properly, and it would
> avoid making a copy in the case of fancy indexing. You could look at
> the implementation of ufunc.reduceat
> (numpy/core/src/umath/ufunc_object.c:PyUFunc_Reduceat) for an idea of
> how such fancy ufunc methods can be done.
>
> (An even more ideal API would find some way to make this work
> naturally with where=, but it's not obvious to me how that would
> work.)
>
> -n
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20120627/e9393041/attachment.html>


More information about the NumPy-Discussion mailing list