summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Berg <sebastian@sipsolutions.net>2013-10-23 00:52:34 +0200
committerSebastian Berg <sebastian@sipsolutions.net>2013-10-24 02:22:42 +0200
commit77ecefbbae4892f45ffed0119ca3dab28a4d1f65 (patch)
treebc2a4c2e37f51b8660157785bd1c786f182a0d5b
parent54d3559c325be26f8fee71e1c669cc502286dc77 (diff)
downloadnumpy-77ecefbbae4892f45ffed0119ca3dab28a4d1f65.tar.gz
BUG|MAINT: Fix reference count bugs, init NpyIter strides
Also changes some tests to not use np.empty as to avoid valgrind spam. The NpyIter strides are arbitrary, but 0 makes sense, and the strides are used to decide which transfer function to use, etc. causing lots of warnings in valgrind.
-rw-r--r--numpy/core/src/multiarray/multiarraymodule.c1
-rw-r--r--numpy/core/src/multiarray/nditer_constr.c1
-rw-r--r--numpy/core/src/umath/ufunc_object.c2
-rw-r--r--numpy/core/tests/test_api.py16
4 files changed, 11 insertions, 9 deletions
diff --git a/numpy/core/src/multiarray/multiarraymodule.c b/numpy/core/src/multiarray/multiarraymodule.c
index ea879c226..a89e27595 100644
--- a/numpy/core/src/multiarray/multiarraymodule.c
+++ b/numpy/core/src/multiarray/multiarraymodule.c
@@ -1548,6 +1548,7 @@ _prepend_ones(PyArrayObject *arr, int nd, int ndmin, NPY_ORDER order)
PyArray_FLAGS(arr),
(PyObject *)arr);
if (ret == NULL) {
+ Py_DECREF(arr);
return NULL;
}
/* steals a reference to arr --- so don't increment here */
diff --git a/numpy/core/src/multiarray/nditer_constr.c b/numpy/core/src/multiarray/nditer_constr.c
index 053777f6a..1b2708619 100644
--- a/numpy/core/src/multiarray/nditer_constr.c
+++ b/numpy/core/src/multiarray/nditer_constr.c
@@ -1565,6 +1565,7 @@ npyiter_fill_axisdata(NpyIter *iter, npy_uint32 flags, npyiter_opitflags *op_itf
NAD_SHAPE(axisdata) = 1;
NAD_INDEX(axisdata) = 0;
memcpy(NAD_PTRS(axisdata), op_dataptr, NPY_SIZEOF_INTP*nop);
+ memset(NAD_STRIDES(axisdata), 0, NPY_SIZEOF_INTP*nop);
}
/* Now process the operands, filling in the axisdata */
diff --git a/numpy/core/src/umath/ufunc_object.c b/numpy/core/src/umath/ufunc_object.c
index e419a6611..dedcb4e6c 100644
--- a/numpy/core/src/umath/ufunc_object.c
+++ b/numpy/core/src/umath/ufunc_object.c
@@ -5076,7 +5076,7 @@ ufunc_at(PyUFuncObject *ufunc, PyObject *args)
}
else {
Py_INCREF(PyArray_DESCR(op1_array));
- array_operands[2] = new_array_op(op1_array, iter->dataptr);
+ array_operands[1] = new_array_op(op1_array, iter->dataptr);
array_operands[2] = NULL;
}
diff --git a/numpy/core/tests/test_api.py b/numpy/core/tests/test_api.py
index d642a2237..c4c9ad1b3 100644
--- a/numpy/core/tests/test_api.py
+++ b/numpy/core/tests/test_api.py
@@ -122,13 +122,13 @@ def test_array_array():
# Try with lists...
assert_equal(np.array([None] * 10, dtype=np.float64),
- np.empty((10,), dtype=np.float64) + np.nan)
+ np.full((10,), np.nan, dtype=np.float64))
assert_equal(np.array([[None]] * 10, dtype=np.float64),
- np.empty((10, 1), dtype=np.float64) + np.nan)
+ np.full((10, 1), np.nan, dtype=np.float64))
assert_equal(np.array([[None] * 10], dtype=np.float64),
- np.empty((1, 10), dtype=np.float64) + np.nan)
+ np.full((1, 10), np.nan, dtype=np.float64))
assert_equal(np.array([[None] * 10] * 10, dtype=np.float64),
- np.empty((10, 10), dtype=np.float64) + np.nan)
+ np.full((10, 10), np.nan, dtype=np.float64))
assert_equal(np.array([1.0] * 10, dtype=np.float64),
np.ones((10,), dtype=np.float64))
@@ -141,13 +141,13 @@ def test_array_array():
# Try with tuples
assert_equal(np.array((None,) * 10, dtype=np.float64),
- np.empty((10,), dtype=np.float64) + np.nan)
+ np.full((10,), np.nan, dtype=np.float64))
assert_equal(np.array([(None,)] * 10, dtype=np.float64),
- np.empty((10, 1), dtype=np.float64) + np.nan)
+ np.full((10, 1), np.nan, dtype=np.float64))
assert_equal(np.array([(None,) * 10], dtype=np.float64),
- np.empty((1, 10), dtype=np.float64) + np.nan)
+ np.full((1, 10), np.nan, dtype=np.float64))
assert_equal(np.array([(None,) * 10] * 10, dtype=np.float64),
- np.empty((10, 10), dtype=np.float64) + np.nan)
+ np.full((10, 10), np.nan, dtype=np.float64))
assert_equal(np.array((1.0,) * 10, dtype=np.float64),
np.ones((10,), dtype=np.float64))