diff options
author | Mark Wiebe <mwwiebe@gmail.com> | 2011-01-05 21:26:59 -0800 |
---|---|---|
committer | Mark Wiebe <mwwiebe@gmail.com> | 2011-01-09 01:55:03 -0800 |
commit | 05721c2c9a58ffd0a069f9830bfae2e4b22b12d5 (patch) | |
tree | 32f5bd5e1a317b0bf0cb63209432728224c35a47 | |
parent | 3026d406f64e41ec34f7dc9d912466b23d10cc89 (diff) | |
download | numpy-05721c2c9a58ffd0a069f9830bfae2e4b22b12d5.tar.gz |
ENH: iter: Make the GROWINNER flag not imply BUFFERED
-rw-r--r-- | numpy/core/src/multiarray/new_iterator.c.src | 4 | ||||
-rw-r--r-- | numpy/core/src/multiarray/new_iterator.h | 4 | ||||
-rw-r--r-- | numpy/core/src/multiarray/new_iterator_pywrap.c | 13 | ||||
-rw-r--r-- | numpy/core/tests/test_new_iterator.py | 3 |
4 files changed, 13 insertions, 11 deletions
diff --git a/numpy/core/src/multiarray/new_iterator.c.src b/numpy/core/src/multiarray/new_iterator.c.src index 480e5bd1a..b2fb13df6 100644 --- a/numpy/core/src/multiarray/new_iterator.c.src +++ b/numpy/core/src/multiarray/new_iterator.c.src @@ -1751,9 +1751,9 @@ npyiter_check_global_flags(npy_uint32 flags, npy_uint32* itflags) (*itflags) |= NPY_ITFLAG_NOINNER; } /* Buffering */ - if (flags&(NPY_ITER_BUFFERED|NPY_ITER_BUFFERED_GROWINNER)) { + if (flags&NPY_ITER_BUFFERED) { (*itflags) |= NPY_ITFLAG_BUFFER; - if (flags&NPY_ITER_BUFFERED_GROWINNER) { + if (flags&NPY_ITER_GROWINNER) { (*itflags) |= NPY_ITFLAG_GROWINNER; } } diff --git a/numpy/core/src/multiarray/new_iterator.h b/numpy/core/src/multiarray/new_iterator.h index 61218141b..6c4e947e5 100644 --- a/numpy/core/src/multiarray/new_iterator.h +++ b/numpy/core/src/multiarray/new_iterator.h @@ -123,8 +123,8 @@ NPY_NO_EXPORT void NpyIter_DebugPrint(NpyIter *iter); #define NPY_ITER_COMMON_DTYPE 0x00000010 /* Enables buffering */ #define NPY_ITER_BUFFERED 0x00000020 -/* Enables buffering, and grows the inner loop when possible */ -#define NPY_ITER_BUFFERED_GROWINNER 0x00000040 +/* When buffering is enabled, grows the inner loop when possible */ +#define NPY_ITER_GROWINNER 0x00000040 /*** Per-operand flags that may be passed to the iterator constructors ***/ diff --git a/numpy/core/src/multiarray/new_iterator_pywrap.c b/numpy/core/src/multiarray/new_iterator_pywrap.c index fc6ddc6ce..058a6212d 100644 --- a/numpy/core/src/multiarray/new_iterator_pywrap.c +++ b/numpy/core/src/multiarray/new_iterator_pywrap.c @@ -117,9 +117,6 @@ NpyIter_GlobalFlagsConverter(PyObject *flags_in, npy_uint32 *flags) if (strcmp(str, "buffered") == 0) { flag = NPY_ITER_BUFFERED; } - else if (strcmp(str, "buffered_growinner") == 0) { - flag = NPY_ITER_BUFFERED_GROWINNER; - } break; case 'c': if (length >= 6) switch (str[5]) { @@ -145,6 +142,11 @@ NpyIter_GlobalFlagsConverter(PyObject *flags_in, npy_uint32 *flags) flag = NPY_ITER_F_INDEX; } break; + case 'g': + if (strcmp(str, "growinner") == 0) { + flag = NPY_ITER_GROWINNER; + } + break; case 'n': if (strcmp(str, "no_inner_iteration") == 0) { flag = NPY_ITER_NO_INNER_ITERATION; @@ -932,7 +934,7 @@ NpyIter_NestedIters(PyObject *NPY_UNUSED(self), * clear the nbo_aligned flag and strip the data type * for the outer loops. */ - if ((flags&(NPY_ITER_BUFFERED|NPY_ITER_BUFFERED_GROWINNER)) && + if ((flags&(NPY_ITER_BUFFERED)) && !(op_flags[iiter]&(NPY_ITER_COPY| NPY_ITER_UPDATEIFCOPY| NPY_ITER_ALLOCATE))) { @@ -945,8 +947,7 @@ NpyIter_NestedIters(PyObject *NPY_UNUSED(self), /* Only the inner loop gets the buffering and no inner flags */ flags_inner = flags&~NPY_ITER_COMMON_DTYPE; flags &= ~(NPY_ITER_NO_INNER_ITERATION| - NPY_ITER_BUFFERED| - NPY_ITER_BUFFERED_GROWINNER); + NPY_ITER_BUFFERED); for (inest = 0; inest < nnest; ++inest) { NewNpyArrayIterObject *iter; diff --git a/numpy/core/tests/test_new_iterator.py b/numpy/core/tests/test_new_iterator.py index 6ded7cea0..67c44e7e3 100644 --- a/numpy/core/tests/test_new_iterator.py +++ b/numpy/core/tests/test_new_iterator.py @@ -1336,7 +1336,8 @@ def test_iter_buffering_badwriteback(): def test_iter_buffering_growinner(): # Test that the inner loop grows when no buffering is needed a = np.arange(30) - i = np.newiter(a, ['buffered_growinner','no_inner_iteration'], buffersize=5) + i = np.newiter(a, ['buffered','growinner','no_inner_iteration'], + buffersize=5) # Should end up with just one inner loop here assert_equal(i[0].size, a.size) |