Cython just has interfaces to the C-API, I think. On Tue, Jan 4, 2011 at 1:01 PM, Mark Wiebe <mwwi...@gmail.com> wrote:
> Oh, and I'm not sure about Cython, since I've never looked into its > details. I imagine Cython will want to short circuit some of the Python > exposure code, since accessing the iterator values creates new array > objects. > > -Mark > > > On Tue, Jan 4, 2011 at 12:59 PM, Mark Wiebe <mwwi...@gmail.com> wrote: > >> On Tue, Jan 4, 2011 at 12:15 PM, John Salvatier < >> jsalv...@u.washington.edu> wrote: >> >>> Wow, great! I'm excited to try this. I think your patch significantly >>> increases the extendability of numpy. >>> >>> Is the C-API exposed currently? Can you use the API from Cython (meaning >>> is the numpy.pxd file updated)? >>> >> >> The C-API isn't exposed yet, but that won't be too difficult since it's >> mostly a matter of adding all the functions to the arrays in the python >> setup files. I thought I might do that and look at plugging it into numexpr >> at the same time, since to be able to use the iterator's buffering and >> numexpr's multithreading together will require some small additions to the >> iterator. >> >> Cheers, >> Mark >> >> On Tue, Jan 4, 2011 at 12:04 PM, Mark Wiebe <mwwi...@gmail.com> wrote: >>> >>>> On Sat, Jan 1, 2011 at 11:23 AM, John Salvatier < >>>> jsalv...@u.washington.edu> wrote: >>>> >>>>> This thread is a bit old, but since it's not possible to use the C-API >>>>> is possible to accomplish this same thing with the Python API? >>>>> >>>> >>>> I've committed Python exposure for nested iteration to the new_iterator >>>> branch. In doing so, I also changed the mechanism in C. I found that it >>>> was simpler to expose to Python if I added a Reset function which gives new >>>> base data pointers, and this also simplifies C code using nested iterators. >>>> >>>> The Python code >>>> >>>> a = arange(2).reshape(2,1) >>>> b = arange(3).reshape(1,3) >>>> >>>> i, j = np.nested_iters([a,b], [[0],[1]]) >>>> for x in i: >>>> print "inner:" >>>> for y in j: >>>> print y[0], y[1] >>>> >>>> >>>> gives >>>> >>>> inner: >>>> 0 0 >>>> 0 1 >>>> 0 2 >>>> inner: >>>> 1 0 >>>> 1 1 >>>> 1 2 >>>> >>>> >>>> and C code for nested iteration looks something like this: >>>> >>>> NpyIter *iter1, *iter1; >>>> NpyIter_IterNext_Fn iternext1, iternext2; >>>> char **dataptrs1; >>>> >>>> /* >>>> * With the exact same operands, no copies allowed, and >>>> * no axis in op_axes used both in iter1 and iter2. >>>> * Buffering may be enabled for iter2, but not for iter1. >>>> */ >>>> iter1 = ...; iter2 = ...; >>>> >>>> iternext1 = NpyIter_GetIterNext(iter1); >>>> iternext2 = NpyIter_GetIterNext(iter2); >>>> dataptrs1 = NpyIter_GetDataPtrArray(iter1); >>>> >>>> do { >>>> NpyIter_ResetBasePointers(iter2, dataptrs1); >>>> do { >>>> /* Use the iter2 values */ >>>> } while (iternext2(iter2)); >>>> } while (iternext1(iter1)); >>>> >>>> Cheers, >>>> Mark >>>> >>>> _______________________________________________ >>>> NumPy-Discussion mailing list >>>> NumPy-Discussion@scipy.org >>>> http://mail.scipy.org/mailman/listinfo/numpy-discussion >>>> >>>> >>> >>> _______________________________________________ >>> NumPy-Discussion mailing list >>> NumPy-Discussion@scipy.org >>> http://mail.scipy.org/mailman/listinfo/numpy-discussion >>> >>> >> > > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > http://mail.scipy.org/mailman/listinfo/numpy-discussion > >
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion