From 93100c92b57dd9663b688fdd94efc7d05ef7ff38 Mon Sep 17 00:00:00 2001 From: Jay Bourque Date: Fri, 31 Aug 2012 12:51:44 -0500 Subject: Fix returned copy Fix returned copy so that copy of view with offsets copies only fields in view, not all the fields from original array. Also add unit tests to make sure this doesn't break when copy is fully deprecated in favor of returning a view. --- numpy/core/_internal.py | 6 +++++- numpy/core/tests/test_multiarray.py | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) (limited to 'numpy') diff --git a/numpy/core/_internal.py b/numpy/core/_internal.py index 92ab0c8b0..fbe580dee 100644 --- a/numpy/core/_internal.py +++ b/numpy/core/_internal.py @@ -295,7 +295,11 @@ def _index_fields(ary, fields): view_dtype = {'names':names, 'formats':formats, 'offsets':offsets, 'itemsize':dt.itemsize} view = ary.view(dtype=view_dtype) - return view.copy() + # Return a copy for now until behavior is fully deprecated + # in favor of returning view + copy_dtype = {'names':view_dtype['names'], 'formats':view_dtype['formats']} + from numpy import array + return array(view, dtype=copy_dtype, copy=True) # Given a string containing a PEP 3118 format specifier, # construct a Numpy dtype diff --git a/numpy/core/tests/test_multiarray.py b/numpy/core/tests/test_multiarray.py index b9fd3ad86..118f221ae 100644 --- a/numpy/core/tests/test_multiarray.py +++ b/numpy/core/tests/test_multiarray.py @@ -1956,6 +1956,11 @@ class TestRecord(TestCase): assert_equal(b[['f1','f2']][0].tolist(), (2, 3)) assert_equal(b[['f2','f1']][0].tolist(), (3, 2)) assert_equal(b[['f1','f3']][0].tolist(), (2, (1,))) + # view of subfield view/copy + assert_equal(b[['f1','f2']][0].view(('i4',2)).tolist(), (2, 3)) + assert_equal(b[['f2','f1']][0].view(('i4',2)).tolist(), (3, 2)) + view_dtype=[('f1', 'i4'),('f3', [('', 'i4')])] + assert_equal(b[['f1','f3']][0].view(view_dtype).tolist(), (2, (1,))) # non-ascii unicode field indexing is well behaved if not is_py3: raise SkipTest('non ascii unicode field indexing skipped; ' -- cgit v1.2.1