Author: mattip <[email protected]>
Branch: numpy-1.10
Changeset: r80796:f13f3012726c
Date: 2015-11-20 16:15 +0200
http://bitbucket.org/pypy/pypy/changeset/f13f3012726c/
Log: allow records in void types, progress in numpy issue #9
diff --git a/pypy/module/micronumpy/__init__.py
b/pypy/module/micronumpy/__init__.py
--- a/pypy/module/micronumpy/__init__.py
+++ b/pypy/module/micronumpy/__init__.py
@@ -143,7 +143,6 @@
def setup_after_space_initialization(self):
from pypy.module.micronumpy.support import W_VisibleDeprecationWarning
- print 'in setup_after_space_initialization', self.space
for name, w_type in {'VisibleDeprecationWarning':
W_VisibleDeprecationWarning}.items():
setattr(self.space, 'w_' + name, self.space.gettypefor(w_type))
diff --git a/pypy/module/micronumpy/ndarray.py
b/pypy/module/micronumpy/ndarray.py
--- a/pypy/module/micronumpy/ndarray.py
+++ b/pypy/module/micronumpy/ndarray.py
@@ -75,7 +75,7 @@
dtype = space.interp_w(descriptor.W_Dtype, space.call_function(
space.gettypefor(descriptor.W_Dtype), w_dtype))
if (dtype.elsize != self.get_dtype().elsize or
- dtype.is_flexible() or self.get_dtype().is_flexible()):
+ (not dtype.is_record() and self.get_dtype().is_flexible())):
raise OperationError(space.w_ValueError, space.wrap(
"new type not compatible with array."))
self.implementation.set_dtype(space, dtype)
diff --git a/pypy/module/micronumpy/test/test_ndarray.py
b/pypy/module/micronumpy/test/test_ndarray.py
--- a/pypy/module/micronumpy/test/test_ndarray.py
+++ b/pypy/module/micronumpy/test/test_ndarray.py
@@ -3072,7 +3072,8 @@
assert (b == zeros(10)).all()
def test_array_interface(self):
- from numpy import array, ones
+ from numpy import array
+ import numpy as np
a = array(2.5)
i = a.__array_interface__
assert isinstance(i['data'][0], int)
@@ -3094,9 +3095,10 @@
assert b_data + 3 * b.dtype.itemsize == c_data
class Dummy(object):
- def __init__(self, aif=None):
+ def __init__(self, aif=None, base=None):
if aif is not None:
self.__array_interface__ = aif
+ self.base = base
a = array(Dummy())
assert a.dtype == object
@@ -3124,12 +3126,22 @@
assert b.dtype == 'uint8'
assert b.shape == (50,)
- a = ones((1,), dtype='float16')
+ a = np.ones((1,), dtype='float16')
b = Dummy(a.__array_interface__)
c = array(b)
assert c.dtype == 'float16'
assert (a == c).all()
+ t = np.dtype([("a", np.float64), ("b", np.float64)], align=True)
+ a = np.zeros(10, dtype=t)
+ a['a'] = range(10, 20)
+ a['b'] = range(20, 30)
+ interface = dict(a.__array_interface__)
+ array = np.array(Dummy(interface))
+ assert array.dtype.kind == 'V'
+ array.dtype = a.dtype
+ assert array[5]['b'] == 25
+
def test_array_indexing_one_elem(self):
from numpy import array, arange
raises(IndexError, 'arange(3)[array([3.5])]')
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
@@ -2423,12 +2423,11 @@
@jit.unroll_safe
def store(self, arr, i, offset, box, native):
- assert i == 0
assert isinstance(box, boxes.W_VoidBox)
assert box.dtype is box.arr.dtype
with arr as arr_storage, box.arr as box_storage:
for k in range(box.arr.dtype.elsize):
- arr_storage[k + offset] = box_storage[k + box.ofs]
+ arr_storage[i + k + offset] = box_storage[k + box.ofs]
def readarray(self, arr, i, offset, dtype=None):
from pypy.module.micronumpy.base import W_NDimArray
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit