summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--numpy/core/src/multiarray/descriptor.c8
-rw-r--r--numpy/core/tests/test_dtype.py4
2 files changed, 12 insertions, 0 deletions
diff --git a/numpy/core/src/multiarray/descriptor.c b/numpy/core/src/multiarray/descriptor.c
index 83cd64bdc..03a4654a0 100644
--- a/numpy/core/src/multiarray/descriptor.c
+++ b/numpy/core/src/multiarray/descriptor.c
@@ -806,11 +806,19 @@ _use_inherit(PyArray_Descr *type, PyObject *newobj, int *errflag)
}
new->elsize = conv->elsize;
if (PyDataType_HASFIELDS(conv)) {
+ Py_XDECREF(new->fields);
new->fields = conv->fields;
Py_XINCREF(new->fields);
+
+ Py_XDECREF(new->names);
new->names = conv->names;
Py_XINCREF(new->names);
}
+ if (conv->metadata != NULL) {
+ Py_XDECREF(new->metadata);
+ new->metadata = conv->metadata;
+ Py_XINCREF(new->metadata);
+ }
new->flags = conv->flags;
Py_DECREF(conv);
*errflag = 0;
diff --git a/numpy/core/tests/test_dtype.py b/numpy/core/tests/test_dtype.py
index 29f2ee7bd..6d898eaa1 100644
--- a/numpy/core/tests/test_dtype.py
+++ b/numpy/core/tests/test_dtype.py
@@ -408,6 +408,10 @@ class TestMetadata(TestCase):
d = np.dtype([('a', np.dtype(int, metadata={'datum': 1}))])
self.assertEqual(d['a'].metadata, {'datum': 1})
+ def base_metadata_copied(self):
+ d = np.dtype((np.void, np.dtype('i4,i4', metadata={'datum': 1})))
+ assert_equal(d.metadata, {'datum': 1})
+
class TestString(TestCase):
def test_complex_dtype_str(self):
dt = np.dtype([('top', [('tiles', ('>f4', (64, 64)), (1,)),