summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wiebe <mwwiebe@gmail.com>2011-01-05 21:26:59 -0800
committerMark Wiebe <mwwiebe@gmail.com>2011-01-09 01:55:03 -0800
commit05721c2c9a58ffd0a069f9830bfae2e4b22b12d5 (patch)
tree32f5bd5e1a317b0bf0cb63209432728224c35a47
parent3026d406f64e41ec34f7dc9d912466b23d10cc89 (diff)
downloadnumpy-05721c2c9a58ffd0a069f9830bfae2e4b22b12d5.tar.gz
ENH: iter: Make the GROWINNER flag not imply BUFFERED
-rw-r--r--numpy/core/src/multiarray/new_iterator.c.src4
-rw-r--r--numpy/core/src/multiarray/new_iterator.h4
-rw-r--r--numpy/core/src/multiarray/new_iterator_pywrap.c13
-rw-r--r--numpy/core/tests/test_new_iterator.py3
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)