diff options
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/core/src/multiarray/arrayobject.c | 1 | ||||
-rw-r--r-- | numpy/core/src/multiarray/arraytypes.c.src | 2 | ||||
-rw-r--r-- | numpy/core/src/multiarray/arraytypes.h | 4 | ||||
-rw-r--r-- | numpy/core/src/multiarray/calculation.c | 16 | ||||
-rw-r--r-- | numpy/core/src/multiarray/compiled_base.c | 37 | ||||
-rw-r--r-- | numpy/core/src/multiarray/ctors.c | 8 | ||||
-rw-r--r-- | numpy/core/src/multiarray/einsum.c.src | 21 | ||||
-rw-r--r-- | numpy/core/src/multiarray/getset.c | 1 | ||||
-rw-r--r-- | numpy/core/src/multiarray/item_selection.c | 44 | ||||
-rw-r--r-- | numpy/core/src/multiarray/mapping.c | 7 | ||||
-rw-r--r-- | numpy/core/src/multiarray/methods.c | 2 | ||||
-rw-r--r-- | numpy/core/src/multiarray/nditer_api.c | 2 | ||||
-rw-r--r-- | numpy/core/src/multiarray/nditer_constr.c | 3 | ||||
-rw-r--r-- | numpy/core/src/multiarray/nditer_pywrap.c | 4 | ||||
-rw-r--r-- | numpy/core/src/multiarray/shape.c | 17 | ||||
-rw-r--r-- | numpy/core/tests/test_multiarray.py | 16 | ||||
-rw-r--r-- | numpy/testing/_private/utils.py | 93 |
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 |