diff options
author | Charles Harris <charlesr.harris@gmail.com> | 2015-12-06 12:56:51 -0700 |
---|---|---|
committer | Charles Harris <charlesr.harris@gmail.com> | 2015-12-06 12:56:51 -0700 |
commit | db6300726ac9f73282ce8fda5588d958c0f327b4 (patch) | |
tree | 91e790cbb6afe209d4eaa93e3ae3f280d82460fe | |
parent | 328f89e48558b8c9523a6c41696fd2b677930fa1 (diff) | |
parent | 7ffa81f04ba046d5413ab7c3f22c44fd545fcd5a (diff) | |
download | numpy-db6300726ac9f73282ce8fda5588d958c0f327b4.tar.gz |
Merge pull request #6780 from ahaldane/preserve_metadata
BUG: metadata is not copied to base_dtype
-rw-r--r-- | numpy/core/src/multiarray/descriptor.c | 8 | ||||
-rw-r--r-- | numpy/core/tests/test_dtype.py | 4 |
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,)), |