summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/src/multiarray/arrayobject.c1
-rw-r--r--numpy/core/src/multiarray/arraytypes.c.src2
-rw-r--r--numpy/core/src/multiarray/arraytypes.h4
-rw-r--r--numpy/core/src/multiarray/calculation.c16
-rw-r--r--numpy/core/src/multiarray/compiled_base.c37
-rw-r--r--numpy/core/src/multiarray/ctors.c8
-rw-r--r--numpy/core/src/multiarray/einsum.c.src21
-rw-r--r--numpy/core/src/multiarray/getset.c1
-rw-r--r--numpy/core/src/multiarray/item_selection.c44
-rw-r--r--numpy/core/src/multiarray/mapping.c7
-rw-r--r--numpy/core/src/multiarray/methods.c2
-rw-r--r--numpy/core/src/multiarray/nditer_api.c2
-rw-r--r--numpy/core/src/multiarray/nditer_constr.c3
-rw-r--r--numpy/core/src/multiarray/nditer_pywrap.c4
-rw-r--r--numpy/core/src/multiarray/shape.c17
-rw-r--r--numpy/core/tests/test_multiarray.py16
-rw-r--r--numpy/testing/_private/utils.py93
17 files changed, 80 insertions, 198 deletions
diff --git a/numpy/core/src/multiarray/arrayobject.c b/numpy/core/src/multiarray/arrayobject.c
index 6f4d3d349..e1db4d6f6 100644
--- a/numpy/core/src/multiarray/arrayobject.c
+++ b/numpy/core/src/multiarray/arrayobject.c
@@ -1663,7 +1663,6 @@ array_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds)
descr = NULL;
goto fail;
}
- PyArray_UpdateFlags(ret, NPY_ARRAY_UPDATE_ALL);
Py_INCREF(buffer.base);
if (PyArray_SetBaseObject(ret, buffer.base) < 0) {
Py_DECREF(ret);
diff --git a/numpy/core/src/multiarray/arraytypes.c.src b/numpy/core/src/multiarray/arraytypes.c.src
index 972147bb0..48003e6a3 100644
--- a/numpy/core/src/multiarray/arraytypes.c.src
+++ b/numpy/core/src/multiarray/arraytypes.c.src
@@ -736,7 +736,6 @@ VOID_getitem(void *input, void *vap)
Py_DECREF(ret);
return NULL;
}
- PyArray_UpdateFlags((PyArrayObject *)ret, NPY_ARRAY_UPDATE_ALL);
return (PyObject *)ret;
}
@@ -936,7 +935,6 @@ VOID_setitem(PyObject *op, void *input, void *vap)
Py_DECREF(ret);
return -1;
}
- PyArray_UpdateFlags(ret, NPY_ARRAY_UPDATE_ALL);
res = PyArray_CopyObject(ret, op);
Py_DECREF(ret);
return res;
diff --git a/numpy/core/src/multiarray/arraytypes.h b/numpy/core/src/multiarray/arraytypes.h
index d1c16cdea..a9469aef7 100644
--- a/numpy/core/src/multiarray/arraytypes.h
+++ b/numpy/core/src/multiarray/arraytypes.h
@@ -3,10 +3,6 @@
#include "common.h"
-extern NPY_NO_EXPORT PyArray_Descr LONGLONG_Descr;
-extern NPY_NO_EXPORT PyArray_Descr LONG_Descr;
-extern NPY_NO_EXPORT PyArray_Descr INT_Descr;
-
NPY_NO_EXPORT int
set_typeinfo(PyObject *dict);
diff --git a/numpy/core/src/multiarray/calculation.c b/numpy/core/src/multiarray/calculation.c
index e24ac2b57..e47dd81b9 100644
--- a/numpy/core/src/multiarray/calculation.c
+++ b/numpy/core/src/multiarray/calculation.c
@@ -100,10 +100,10 @@ PyArray_ArgMax(PyArrayObject *op, int axis, PyArrayObject *out)
}
if (!out) {
- rp = (PyArrayObject *)PyArray_New(Py_TYPE(ap), PyArray_NDIM(ap)-1,
- PyArray_DIMS(ap), NPY_INTP,
- NULL, NULL, 0, 0,
- (PyObject *)ap);
+ rp = (PyArrayObject *)PyArray_NewFromDescr(
+ Py_TYPE(ap), PyArray_DescrFromType(NPY_INTP),
+ PyArray_NDIM(ap) - 1, PyArray_DIMS(ap), NULL, NULL,
+ 0, (PyObject *)ap);
if (rp == NULL) {
goto fail;
}
@@ -216,10 +216,10 @@ PyArray_ArgMin(PyArrayObject *op, int axis, PyArrayObject *out)
}
if (!out) {
- rp = (PyArrayObject *)PyArray_New(Py_TYPE(ap), PyArray_NDIM(ap)-1,
- PyArray_DIMS(ap), NPY_INTP,
- NULL, NULL, 0, 0,
- (PyObject *)ap);
+ rp = (PyArrayObject *)PyArray_NewFromDescr(
+ Py_TYPE(ap), PyArray_DescrFromType(NPY_INTP),
+ PyArray_NDIM(ap) - 1, PyArray_DIMS(ap), NULL, NULL,
+ 0, (PyObject *)ap);
if (rp == NULL) {
goto fail;
}
diff --git a/numpy/core/src/multiarray/compiled_base.c b/numpy/core/src/multiarray/compiled_base.c
index 5ee385c46..25e3dcca3 100644
--- a/numpy/core/src/multiarray/compiled_base.c
+++ b/numpy/core/src/multiarray/compiled_base.c
@@ -273,9 +273,10 @@ arr_digitize(PyObject *NPY_UNUSED(self), PyObject *args, PyObject *kwds)
npy_intp stride = -PyArray_STRIDE(arr_bins, 0);
void *data = (void *)(PyArray_BYTES(arr_bins) - stride * (shape - 1));
- arr_tmp = (PyArrayObject *)PyArray_New(&PyArray_Type, 1, &shape,
- NPY_DOUBLE, &stride, data, 0,
- PyArray_FLAGS(arr_bins), NULL);
+ arr_tmp = (PyArrayObject *)PyArray_NewFromDescr(
+ &PyArray_Type, PyArray_DescrFromType(NPY_DOUBLE),
+ 1, &shape, &stride, data,
+ PyArray_FLAGS(arr_bins), NULL);
if (!arr_tmp) {
goto fail;
}
@@ -1362,11 +1363,11 @@ arr_unravel_index(PyObject *self, PyObject *args, PyObject *kwds)
for (i = 0; i < dimensions.len; ++i) {
PyArrayObject *view;
- view = (PyArrayObject *)PyArray_New(&PyArray_Type, ret_ndim-1,
- ret_dims, NPY_INTP,
- ret_strides,
- PyArray_BYTES(ret_arr) + i*sizeof(npy_intp),
- 0, NPY_ARRAY_WRITEABLE, NULL);
+ view = (PyArrayObject *)PyArray_NewFromDescr(
+ &PyArray_Type, PyArray_DescrFromType(NPY_INTP),
+ ret_ndim - 1, ret_dims, ret_strides,
+ PyArray_BYTES(ret_arr) + i*sizeof(npy_intp),
+ NPY_ARRAY_WRITEABLE, NULL);
if (view == NULL) {
goto fail;
}
@@ -1621,8 +1622,10 @@ pack_bits(PyObject *input, int axis)
if (PyArray_NDIM(new) == 0) {
char *optr, *iptr;
- out = (PyArrayObject *)PyArray_New(Py_TYPE(new), 0, NULL, NPY_UBYTE,
- NULL, NULL, 0, 0, NULL);
+ out = (PyArrayObject *)PyArray_NewFromDescr(
+ Py_TYPE(new), PyArray_DescrFromType(NPY_UBYTE),
+ 0, NULL, NULL, NULL,
+ 0, NULL);
if (out == NULL) {
goto fail;
}
@@ -1652,9 +1655,10 @@ pack_bits(PyObject *input, int axis)
outdims[axis] = ((outdims[axis] - 1) >> 3) + 1;
/* Create output array */
- out = (PyArrayObject *)PyArray_New(Py_TYPE(new),
- PyArray_NDIM(new), outdims, NPY_UBYTE,
- NULL, NULL, 0, PyArray_ISFORTRAN(new), NULL);
+ out = (PyArrayObject *)PyArray_NewFromDescr(
+ Py_TYPE(new), PyArray_DescrFromType(NPY_UBYTE),
+ PyArray_NDIM(new), outdims, NULL, NULL,
+ PyArray_ISFORTRAN(new), NULL);
if (out == NULL) {
goto fail;
}
@@ -1746,9 +1750,10 @@ unpack_bits(PyObject *input, int axis)
outdims[axis] <<= 3;
/* Create output array */
- out = (PyArrayObject *)PyArray_New(Py_TYPE(new),
- PyArray_NDIM(new), outdims, NPY_UBYTE,
- NULL, NULL, 0, PyArray_ISFORTRAN(new), NULL);
+ out = (PyArrayObject *)PyArray_NewFromDescr(
+ Py_TYPE(new), PyArray_DescrFromType(NPY_UBYTE),
+ PyArray_NDIM(new), outdims, NULL, NULL,
+ PyArray_ISFORTRAN(new), NULL);
if (out == NULL) {
goto fail;
}
diff --git a/numpy/core/src/multiarray/ctors.c b/numpy/core/src/multiarray/ctors.c
index da017eb0d..70f5c72aa 100644
--- a/numpy/core/src/multiarray/ctors.c
+++ b/numpy/core/src/multiarray/ctors.c
@@ -1143,8 +1143,8 @@ PyArray_NewFromDescr_int(PyTypeObject *subtype, PyArray_Descr *descr, int nd,
* true, dtype will be decrefed.
*/
NPY_NO_EXPORT PyObject *
-PyArray_NewFromDescr(PyTypeObject *subtype, PyArray_Descr *descr, int nd,
- npy_intp *dims, npy_intp *strides, void *data,
+PyArray_NewFromDescr(PyTypeObject *subtype, PyArray_Descr *descr,
+ int nd, npy_intp *dims, npy_intp *strides, void *data,
int flags, PyObject *obj)
{
return PyArray_NewFromDescr_int(subtype, descr, nd,
@@ -1358,8 +1358,6 @@ _array_from_buffer_3118(PyObject *memoryview)
if (PyArray_SetBaseObject((PyArrayObject *)r, memoryview) < 0) {
goto fail;
}
- PyArray_UpdateFlags((PyArrayObject *)r, NPY_ARRAY_UPDATE_ALL);
-
return r;
fail:
@@ -2124,7 +2122,6 @@ PyArray_FromStructInterface(PyObject *input)
return NULL;
}
Py_DECREF(attr);
- PyArray_UpdateFlags(ret, NPY_ARRAY_UPDATE_ALL);
return (PyObject *)ret;
fail:
@@ -3687,7 +3684,6 @@ PyArray_FromBuffer(PyObject *buf, PyArray_Descr *type,
Py_DECREF(ret);
return NULL;
}
- PyArray_UpdateFlags(ret, NPY_ARRAY_ALIGNED);
return (PyObject *)ret;
}
diff --git a/numpy/core/src/multiarray/einsum.c.src b/numpy/core/src/multiarray/einsum.c.src
index 0eab25299..3c086351f 100644
--- a/numpy/core/src/multiarray/einsum.c.src
+++ b/numpy/core/src/multiarray/einsum.c.src
@@ -2078,17 +2078,6 @@ get_single_op_view(PyArrayObject *op, int iop, char *labels,
if (*ret == NULL) {
return -1;
}
- if (!PyArray_Check(*ret)) {
- Py_DECREF(*ret);
- *ret = NULL;
- PyErr_SetString(PyExc_RuntimeError,
- "NewFromDescr failed to return an array");
- return -1;
- }
- PyArray_UpdateFlags(*ret,
- NPY_ARRAY_C_CONTIGUOUS|
- NPY_ARRAY_ALIGNED|
- NPY_ARRAY_F_CONTIGUOUS);
Py_INCREF(op);
if (PyArray_SetBaseObject(*ret, (PyObject *)op) < 0) {
Py_DECREF(*ret);
@@ -2183,16 +2172,6 @@ get_combined_dims_view(PyArrayObject *op, int iop, char *labels)
if (ret == NULL) {
return NULL;
}
- if (!PyArray_Check(ret)) {
- Py_DECREF(ret);
- PyErr_SetString(PyExc_RuntimeError,
- "NewFromDescr failed to return an array");
- return NULL;
- }
- PyArray_UpdateFlags(ret,
- NPY_ARRAY_C_CONTIGUOUS|
- NPY_ARRAY_ALIGNED|
- NPY_ARRAY_F_CONTIGUOUS);
Py_INCREF(op);
if (PyArray_SetBaseObject(ret, (PyObject *)op) < 0) {
Py_DECREF(ret);
diff --git a/numpy/core/src/multiarray/getset.c b/numpy/core/src/multiarray/getset.c
index 86e6e7a2f..d86f90a53 100644
--- a/numpy/core/src/multiarray/getset.c
+++ b/numpy/core/src/multiarray/getset.c
@@ -758,7 +758,6 @@ _get_part(PyArrayObject *self, int imag)
Py_DECREF(ret);
return NULL;
}
- PyArray_CLEARFLAGS(ret, NPY_ARRAY_C_CONTIGUOUS | NPY_ARRAY_F_CONTIGUOUS);
return ret;
}
diff --git a/numpy/core/src/multiarray/item_selection.c b/numpy/core/src/multiarray/item_selection.c
index eb9ef5915..d010b2e75 100644
--- a/numpy/core/src/multiarray/item_selection.c
+++ b/numpy/core/src/multiarray/item_selection.c
@@ -955,9 +955,10 @@ _new_argsortlike(PyArrayObject *op, int axis, PyArray_ArgSortFunc *argsort,
NPY_BEGIN_THREADS_DEF;
- rop = (PyArrayObject *)PyArray_New(Py_TYPE(op), PyArray_NDIM(op),
- PyArray_DIMS(op), NPY_INTP,
- NULL, NULL, 0, 0, (PyObject *)op);
+ rop = (PyArrayObject *)PyArray_NewFromDescr(
+ Py_TYPE(op), PyArray_DescrFromType(NPY_INTP),
+ PyArray_NDIM(op), PyArray_DIMS(op), NULL, NULL,
+ 0, (PyObject *)op);
if (rop == NULL) {
return NULL;
}
@@ -1439,10 +1440,10 @@ PyArray_LexSort(PyObject *sort_keys, int axis)
nd = PyArray_NDIM(mps[0]);
if ((nd == 0) || (PyArray_SIZE(mps[0]) == 1)) {
/* single element case */
- ret = (PyArrayObject *)PyArray_New(&PyArray_Type, PyArray_NDIM(mps[0]),
- PyArray_DIMS(mps[0]),
- NPY_INTP,
- NULL, NULL, 0, 0, NULL);
+ ret = (PyArrayObject *)PyArray_NewFromDescr(
+ &PyArray_Type, PyArray_DescrFromType(NPY_INTP),
+ PyArray_NDIM(mps[0]), PyArray_DIMS(mps[0]), NULL, NULL,
+ 0, NULL);
if (ret == NULL) {
goto fail;
@@ -1463,9 +1464,10 @@ PyArray_LexSort(PyObject *sort_keys, int axis)
}
/* Now do the sorting */
- ret = (PyArrayObject *)PyArray_New(&PyArray_Type, PyArray_NDIM(mps[0]),
- PyArray_DIMS(mps[0]), NPY_INTP,
- NULL, NULL, 0, 0, NULL);
+ ret = (PyArrayObject *)PyArray_NewFromDescr(
+ &PyArray_Type, PyArray_DescrFromType(NPY_INTP),
+ PyArray_NDIM(mps[0]), PyArray_DIMS(mps[0]), NULL, NULL,
+ 0, NULL);
if (ret == NULL) {
goto fail;
}
@@ -1737,9 +1739,10 @@ PyArray_SearchSorted(PyArrayObject *op1, PyObject *op2,
}
/* ret is a contiguous array of intp type to hold returned indexes */
- ret = (PyArrayObject *)PyArray_New(&PyArray_Type, PyArray_NDIM(ap2),
- PyArray_DIMS(ap2), NPY_INTP,
- NULL, NULL, 0, 0, (PyObject *)ap2);
+ ret = (PyArrayObject *)PyArray_NewFromDescr(
+ &PyArray_Type, PyArray_DescrFromType(NPY_INTP),
+ PyArray_NDIM(ap2), PyArray_DIMS(ap2), NULL, NULL,
+ 0, (PyObject *)ap2);
if (ret == NULL) {
goto fail;
}
@@ -2207,9 +2210,10 @@ PyArray_Nonzero(PyArrayObject *self)
/* Allocate the result as a 2D array */
ret_dims[0] = nonzero_count;
ret_dims[1] = (ndim == 0) ? 1 : ndim;
- ret = (PyArrayObject *)PyArray_New(&PyArray_Type, 2, ret_dims,
- NPY_INTP, NULL, NULL, 0, 0,
- NULL);
+ ret = (PyArrayObject *)PyArray_NewFromDescr(
+ &PyArray_Type, PyArray_DescrFromType(NPY_INTP),
+ 2, ret_dims, NULL, NULL,
+ 0, NULL);
if (ret == NULL) {
return NULL;
}
@@ -2361,10 +2365,10 @@ finish:
/* the result is an empty array, the view must point to valid memory */
npy_intp data_offset = is_empty ? 0 : i * NPY_SIZEOF_INTP;
- PyArrayObject *view = (PyArrayObject *)PyArray_New(Py_TYPE(ret), 1,
- &nonzero_count, NPY_INTP, &stride,
- PyArray_BYTES(ret) + data_offset,
- 0, PyArray_FLAGS(ret), (PyObject *)ret);
+ PyArrayObject *view = (PyArrayObject *)PyArray_NewFromDescr(
+ Py_TYPE(ret), PyArray_DescrFromType(NPY_INTP),
+ 1, &nonzero_count, &stride, PyArray_BYTES(ret) + data_offset,
+ PyArray_FLAGS(ret), (PyObject *)ret);
if (view == NULL) {
Py_DECREF(ret);
Py_DECREF(ret_tuple);
diff --git a/numpy/core/src/multiarray/mapping.c b/numpy/core/src/multiarray/mapping.c
index 42dbc3cce..f2782ff27 100644
--- a/numpy/core/src/multiarray/mapping.c
+++ b/numpy/core/src/multiarray/mapping.c
@@ -2215,9 +2215,10 @@ _nonzero_indices(PyObject *myBool, PyArrayObject **arrays)
/* create count-sized index arrays for each dimension */
for (j = 0; j < nd; j++) {
- new = (PyArrayObject *)PyArray_New(&PyArray_Type, 1, &count,
- NPY_INTP, NULL, NULL,
- 0, 0, NULL);
+ new = (PyArrayObject *)PyArray_NewFromDescr(
+ &PyArray_Type, PyArray_DescrFromType(NPY_INTP),
+ 1, &count, NULL, NULL,
+ 0, NULL);
if (new == NULL) {
goto fail;
}
diff --git a/numpy/core/src/multiarray/methods.c b/numpy/core/src/multiarray/methods.c
index 004af8a70..ed339b98d 100644
--- a/numpy/core/src/multiarray/methods.c
+++ b/numpy/core/src/multiarray/methods.c
@@ -388,8 +388,6 @@ PyArray_GetField(PyArrayObject *self, PyArray_Descr *typed, int offset)
Py_DECREF(ret);
return NULL;
}
-
- PyArray_UpdateFlags((PyArrayObject *)ret, NPY_ARRAY_UPDATE_ALL);
return ret;
}
diff --git a/numpy/core/src/multiarray/nditer_api.c b/numpy/core/src/multiarray/nditer_api.c
index 152955940..28020f79a 100644
--- a/numpy/core/src/multiarray/nditer_api.c
+++ b/numpy/core/src/multiarray/nditer_api.c
@@ -1153,8 +1153,6 @@ NpyIter_GetIterView(NpyIter *iter, npy_intp i)
Py_DECREF(view);
return NULL;
}
- /* Make sure all the flags are good */
- PyArray_UpdateFlags(view, NPY_ARRAY_UPDATE_ALL);
return view;
}
diff --git a/numpy/core/src/multiarray/nditer_constr.c b/numpy/core/src/multiarray/nditer_constr.c
index c512cf208..b07137858 100644
--- a/numpy/core/src/multiarray/nditer_constr.c
+++ b/numpy/core/src/multiarray/nditer_constr.c
@@ -2675,9 +2675,6 @@ npyiter_new_temp_array(NpyIter *iter, PyTypeObject *subtype,
return NULL;
}
- /* Make sure all the flags are good */
- PyArray_UpdateFlags(ret, NPY_ARRAY_UPDATE_ALL);
-
/* Double-check that the subtype didn't mess with the dimensions */
if (subtype != &PyArray_Type) {
if (PyArray_NDIM(ret) != op_ndim ||
diff --git a/numpy/core/src/multiarray/nditer_pywrap.c b/numpy/core/src/multiarray/nditer_pywrap.c
index 4505e645b..50a138167 100644
--- a/numpy/core/src/multiarray/nditer_pywrap.c
+++ b/numpy/core/src/multiarray/nditer_pywrap.c
@@ -2077,8 +2077,6 @@ npyiter_seq_item(NewNpyArrayIterObject *self, Py_ssize_t i)
return NULL;
}
- PyArray_UpdateFlags(ret, NPY_ARRAY_UPDATE_ALL);
-
return (PyObject *)ret;
}
@@ -2216,8 +2214,6 @@ npyiter_seq_ass_item(NewNpyArrayIterObject *self, Py_ssize_t i, PyObject *v)
return -1;
}
- PyArray_UpdateFlags(tmp, NPY_ARRAY_UPDATE_ALL);
-
ret = PyArray_CopyObject(tmp, v);
Py_DECREF(tmp);
return ret;
diff --git a/numpy/core/src/multiarray/shape.c b/numpy/core/src/multiarray/shape.c
index 05c24d6da..1424a69f3 100644
--- a/numpy/core/src/multiarray/shape.c
+++ b/numpy/core/src/multiarray/shape.c
@@ -189,7 +189,7 @@ PyArray_Newshape(PyArrayObject *self, PyArray_Dims *newdims,
npy_intp *dimensions = newdims->ptr;
PyArrayObject *ret;
int ndim = newdims->len;
- npy_bool same, incref = NPY_TRUE;
+ npy_bool same;
npy_intp *strides = NULL;
npy_intp newstrides[NPY_MAXDIMS];
int flags;
@@ -230,6 +230,7 @@ PyArray_Newshape(PyArrayObject *self, PyArray_Dims *newdims,
* data in the order it is in.
* NPY_RELAXED_STRIDES_CHECKING: size check is unnecessary when set.
*/
+ Py_INCREF(self);
if ((PyArray_SIZE(self) > 1) &&
((order == NPY_CORDER && !PyArray_IS_C_CONTIGUOUS(self)) ||
(order == NPY_FORTRANORDER && !PyArray_IS_F_CONTIGUOUS(self)))) {
@@ -243,10 +244,10 @@ PyArray_Newshape(PyArrayObject *self, PyArray_Dims *newdims,
else {
PyObject *newcopy;
newcopy = PyArray_NewCopy(self, order);
+ Py_DECREF(self);
if (newcopy == NULL) {
return NULL;
}
- incref = NPY_FALSE;
self = (PyArrayObject *)newcopy;
}
}
@@ -277,21 +278,14 @@ PyArray_Newshape(PyArrayObject *self, PyArray_Dims *newdims,
goto fail;
}
- if (incref) {
- Py_INCREF(self);
- }
if (PyArray_SetBaseObject(ret, (PyObject *)self)) {
Py_DECREF(ret);
return NULL;
}
-
- PyArray_UpdateFlags(ret, NPY_ARRAY_C_CONTIGUOUS | NPY_ARRAY_F_CONTIGUOUS);
return (PyObject *)ret;
fail:
- if (!incref) {
- Py_DECREF(self);
- }
+ Py_DECREF(self);
return NULL;
}
@@ -970,9 +964,6 @@ PyArray_Ravel(PyArrayObject *arr, NPY_ORDER order)
if (ret == NULL) {
return NULL;
}
-
- PyArray_UpdateFlags(ret,
- NPY_ARRAY_C_CONTIGUOUS|NPY_ARRAY_F_CONTIGUOUS);
Py_INCREF(arr);
if (PyArray_SetBaseObject(ret, (PyObject *)arr) < 0) {
Py_DECREF(ret);
diff --git a/numpy/core/tests/test_multiarray.py b/numpy/core/tests/test_multiarray.py
index a60f2cd92..3bc7e92c1 100644
--- a/numpy/core/tests/test_multiarray.py
+++ b/numpy/core/tests/test_multiarray.py
@@ -573,6 +573,22 @@ class TestZeroRank(object):
x = np.array(2)
assert_raises(ValueError, np.add, x, [1], x)
+ def test_real_imag(self):
+ # contiguity checks are for gh-11245
+ x = np.array(1j)
+ xr = x.real
+ xi = x.imag
+
+ assert_equal(xr, np.array(0))
+ assert_(type(xr) is np.ndarray)
+ assert_equal(xr.flags.contiguous, True)
+ assert_equal(xr.flags.f_contiguous, True)
+
+ assert_equal(xi, np.array(1))
+ assert_(type(xi) is np.ndarray)
+ assert_equal(xi.flags.contiguous, True)
+ assert_equal(xi.flags.f_contiguous, True)
+
class TestScalarIndexing(object):
def setup(self):
diff --git a/numpy/testing/_private/utils.py b/numpy/testing/_private/utils.py
index a7935f175..528d28b06 100644
--- a/numpy/testing/_private/utils.py
+++ b/numpy/testing/_private/utils.py
@@ -15,6 +15,7 @@ import shutil
import contextlib
from tempfile import mkdtemp, mkstemp
from unittest.case import SkipTest
+from warnings import WarningMessage
import pprint
from numpy.core import(
@@ -1639,98 +1640,6 @@ def integer_repr(x):
raise ValueError("Unsupported dtype %s" % x.dtype)
-# The following two classes are copied from python 2.6 warnings module (context
-# manager)
-class WarningMessage(object):
-
- """
- Holds the result of a single showwarning() call.
-
- Deprecated in 1.8.0
-
- Notes
- -----
- `WarningMessage` is copied from the Python 2.6 warnings module,
- so it can be used in NumPy with older Python versions.
-
- """
-
- _WARNING_DETAILS = ("message", "category", "filename", "lineno", "file",
- "line")
-
- def __init__(self, message, category, filename, lineno, file=None,
- line=None):
- local_values = locals()
- for attr in self._WARNING_DETAILS:
- setattr(self, attr, local_values[attr])
- if category:
- self._category_name = category.__name__
- else:
- self._category_name = None
-
- def __str__(self):
- return ("{message : %r, category : %r, filename : %r, lineno : %s, "
- "line : %r}" % (self.message, self._category_name,
- self.filename, self.lineno, self.line))
-
-
-class WarningManager(object):
- """
- A context manager that copies and restores the warnings filter upon
- exiting the context.
-
- The 'record' argument specifies whether warnings should be captured by a
- custom implementation of ``warnings.showwarning()`` and be appended to a
- list returned by the context manager. Otherwise None is returned by the
- context manager. The objects appended to the list are arguments whose
- attributes mirror the arguments to ``showwarning()``.
-
- The 'module' argument is to specify an alternative module to the module
- named 'warnings' and imported under that name. This argument is only useful
- when testing the warnings module itself.
-
- Deprecated in 1.8.0
-
- Notes
- -----
- `WarningManager` is a copy of the ``catch_warnings`` context manager
- from the Python 2.6 warnings module, with slight modifications.
- It is copied so it can be used in NumPy with older Python versions.
-
- """
-
- def __init__(self, record=False, module=None):
- self._record = record
- if module is None:
- self._module = sys.modules['warnings']
- else:
- self._module = module
- self._entered = False
-
- def __enter__(self):
- if self._entered:
- raise RuntimeError("Cannot enter %r twice" % self)
- self._entered = True
- self._filters = self._module.filters
- self._module.filters = self._filters[:]
- self._showwarning = self._module.showwarning
- if self._record:
- log = []
-
- def showwarning(*args, **kwargs):
- log.append(WarningMessage(*args, **kwargs))
- self._module.showwarning = showwarning
- return log
- else:
- return None
-
- def __exit__(self):
- if not self._entered:
- raise RuntimeError("Cannot exit %r without entering first" % self)
- self._module.filters = self._filters
- self._module.showwarning = self._showwarning
-
-
@contextlib.contextmanager
def _assert_warns_context(warning_class, name=None):
__tracebackhide__ = True # Hide traceback for py.test