[pypy-commit] pypy default: test, fix to support creating a record array from a different record array
mattip
noreply at buildbot.pypy.org
Tue Jun 2 20:12:11 CEST 2015
Author: mattip <matti.picus at gmail.com>
Branch:
Changeset: r77788:0c9994fe9a36
Date: 2015-06-02 21:05 +0300
http://bitbucket.org/pypy/pypy/changeset/0c9994fe9a36/
Log: test, fix to support creating a record array from a different record
array
diff --git a/pypy/module/micronumpy/test/test_dtypes.py b/pypy/module/micronumpy/test/test_dtypes.py
--- a/pypy/module/micronumpy/test/test_dtypes.py
+++ b/pypy/module/micronumpy/test/test_dtypes.py
@@ -1129,6 +1129,16 @@
exc = raises(ValueError, "dtype([('a', '<i8'), ('a', '<f8')])")
assert exc.value[0] == 'two fields with the same name'
+ def test_array_from_record(self):
+ import numpy as np
+ a = np.array(('???', -999, -12345678.9),
+ dtype=[('c', '|S3'), ('a', '<i8'), ('b', '<f8')])
+ # Change the order of the keys
+ b = np.array(a, dtype=[('a', '<i8'), ('b', '<f8'), ('c', '|S3')])
+ assert b.base is None
+ assert b.dtype.fields['a'][1] == 0
+ assert b['a'] == -999
+
def test_create_from_dict(self):
import numpy as np
import sys
diff --git a/pypy/module/micronumpy/types.py b/pypy/module/micronumpy/types.py
--- a/pypy/module/micronumpy/types.py
+++ b/pypy/module/micronumpy/types.py
@@ -2363,8 +2363,16 @@
def coerce(self, space, dtype, w_item):
from pypy.module.micronumpy.base import W_NDimArray
if isinstance(w_item, boxes.W_VoidBox):
- return w_item
- if w_item is not None:
+ if dtype == w_item.dtype:
+ return w_item
+ else:
+ # match up the field names
+ items_w = [None] * len(dtype.fields)
+ for i in range(len(dtype.fields)):
+ name = dtype.names[i]
+ if name in w_item.dtype.names:
+ items_w[i] = w_item.descr_getitem(space, space.wrap(name))
+ elif w_item is not None:
if space.isinstance_w(w_item, space.w_tuple):
if len(dtype.fields) != space.len_w(w_item):
raise OperationError(space.w_ValueError, space.wrap(
More information about the pypy-commit
mailing list