diff options
author | Sebastian Berg <sebastian@sipsolutions.net> | 2013-10-23 00:52:34 +0200 |
---|---|---|
committer | Sebastian Berg <sebastian@sipsolutions.net> | 2013-10-24 02:22:42 +0200 |
commit | 77ecefbbae4892f45ffed0119ca3dab28a4d1f65 (patch) | |
tree | bc2a4c2e37f51b8660157785bd1c786f182a0d5b | |
parent | 54d3559c325be26f8fee71e1c669cc502286dc77 (diff) | |
download | numpy-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.c | 1 | ||||
-rw-r--r-- | numpy/core/src/multiarray/nditer_constr.c | 1 | ||||
-rw-r--r-- | numpy/core/src/umath/ufunc_object.c | 2 | ||||
-rw-r--r-- | numpy/core/tests/test_api.py | 16 |
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)) |