[pypy-commit] pypy default: put getitem/setitem/fill on array, not dtype
bdkearns
noreply at buildbot.pypy.org
Fri Nov 15 01:58:38 CET 2013
Author: Brian Kearns <bdkearns at gmail.com>
Branch:
Changeset: r68125:bdb4b5232832
Date: 2013-11-14 19:44 -0500
http://bitbucket.org/pypy/pypy/changeset/bdb4b5232832/
Log: put getitem/setitem/fill on array, not dtype
diff --git a/pypy/module/micronumpy/arrayimpl/concrete.py b/pypy/module/micronumpy/arrayimpl/concrete.py
--- a/pypy/module/micronumpy/arrayimpl/concrete.py
+++ b/pypy/module/micronumpy/arrayimpl/concrete.py
@@ -36,10 +36,13 @@
return backstrides
def getitem(self, index):
- return self.dtype.getitem(self, index)
+ return self.dtype.itemtype.read(self, index, 0)
+
+ def getitem_bool(self, index):
+ return self.dtype.itemtype.read_bool(self, index, 0)
def setitem(self, index, value):
- self.dtype.setitem(self, index, value)
+ self.dtype.itemtype.store(self, index, 0, value)
def setslice(self, space, arr):
impl = arr.implementation
@@ -268,7 +271,7 @@
def create_dot_iter(self, shape, skip):
r = calculate_dot_strides(self.get_strides(), self.get_backstrides(),
shape, skip)
- return iter.MultiDimViewIterator(self, self.dtype, self.start, r[0], r[1], shape)
+ return iter.MultiDimViewIterator(self, self.start, r[0], r[1], shape)
def swapaxes(self, space, orig_arr, axis1, axis2):
shape = self.get_shape()[:]
@@ -331,21 +334,24 @@
support.product(shape) > support.product(self.get_shape()):
r = calculate_broadcast_strides(self.get_strides(),
self.get_backstrides(),
- self.get_shape(), shape, backward_broadcast)
- return iter.MultiDimViewIterator(self, self.dtype, self.start, r[0], r[1], shape)
-
+ self.get_shape(), shape,
+ backward_broadcast)
+ return iter.MultiDimViewIterator(self, self.start,
+ r[0], r[1], shape)
if not require_index:
return iter.ConcreteArrayIterator(self)
- else:
- if len(self.get_shape()) == 1:
- return iter.OneDimViewIterator(self, self.dtype, self.start,
- self.get_strides(), self.get_shape())
- else:
- return iter.MultiDimViewIterator(self, self.dtype, self.start,
- self.get_strides(), self.get_backstrides(), self.get_shape())
+ if len(self.get_shape()) == 1:
+ return iter.OneDimViewIterator(self, self.start,
+ self.get_strides(),
+ self.get_shape())
+ return iter.MultiDimViewIterator(self, self.start,
+ self.get_strides(),
+ self.get_backstrides(),
+ self.get_shape())
def fill(self, box):
- self.dtype.fill(self.storage, box, 0, self.size)
+ self.dtype.itemtype.fill(self.storage, self.dtype.get_size(),
+ box, 0, self.size, 0)
def set_shape(self, space, orig_array, new_shape):
strides, backstrides = support.calc_strides(new_shape, self.dtype,
@@ -416,14 +422,16 @@
self.get_backstrides(),
self.get_shape(), shape,
backward_broadcast)
- return iter.MultiDimViewIterator(self.parent, self.dtype,
- self.start, r[0], r[1], shape)
+ return iter.MultiDimViewIterator(self, self.start,
+ r[0], r[1], shape)
if len(self.get_shape()) == 1:
- return iter.OneDimViewIterator(self.parent, self.dtype, self.start,
- self.get_strides(), self.get_shape())
- return iter.MultiDimViewIterator(self.parent, self.dtype, self.start,
- self.get_strides(),
- self.get_backstrides(), self.get_shape())
+ return iter.OneDimViewIterator(self, self.start,
+ self.get_strides(),
+ self.get_shape())
+ return iter.MultiDimViewIterator(self, self.start,
+ self.get_strides(),
+ self.get_backstrides(),
+ self.get_shape())
def set_shape(self, space, orig_array, new_shape):
if len(self.get_shape()) < 2 or self.size == 0:
diff --git a/pypy/module/micronumpy/interp_dtype.py b/pypy/module/micronumpy/interp_dtype.py
--- a/pypy/module/micronumpy/interp_dtype.py
+++ b/pypy/module/micronumpy/interp_dtype.py
@@ -81,19 +81,6 @@
def coerce(self, space, w_item):
return self.itemtype.coerce(space, self, w_item)
- def getitem(self, arr, i):
- item = self.itemtype.read(arr, i, 0)
- return item
-
- def getitem_bool(self, arr, i):
- return self.itemtype.read_bool(arr, i, 0)
-
- def setitem(self, arr, i, box):
- self.itemtype.store(arr, i, 0, box)
-
- def fill(self, storage, box, start, stop):
- self.itemtype.fill(storage, self.get_size(), box, start, stop, 0)
-
def is_int_type(self):
return (self.kind == NPY_SIGNEDLTR or self.kind == NPY_UNSIGNEDLTR or
self.kind == NPY_GENBOOLLTR)
diff --git a/pypy/module/micronumpy/iter.py b/pypy/module/micronumpy/iter.py
--- a/pypy/module/micronumpy/iter.py
+++ b/pypy/module/micronumpy/iter.py
@@ -159,23 +159,21 @@
return [space.wrap(self.indexes[i]) for i in range(shapelen)]
class ConcreteArrayIterator(base.BaseArrayIterator):
- _immutable_fields_ = ['dtype', 'skip', 'size']
+ _immutable_fields_ = ['array', 'skip', 'size']
def __init__(self, array):
self.array = array
self.offset = 0
- self.dtype = array.dtype
- self.skip = self.dtype.get_size()
+ self.skip = array.dtype.get_size()
self.size = array.size
def setitem(self, elem):
- self.dtype.setitem(self.array, self.offset, elem)
+ self.array.setitem(self.offset, elem)
def getitem(self):
- item = self.dtype.getitem(self.array, self.offset)
- return item
+ return self.array.getitem(self.offset)
def getitem_bool(self):
- return self.dtype.getitem_bool(self.array, self.offset)
+ return self.array.getitem_bool(self.offset)
def next(self):
self.offset += self.skip
@@ -190,12 +188,8 @@
self.offset %= self.size
class OneDimViewIterator(ConcreteArrayIterator):
- ''' The view iterator dtype can be different from the
- array.dtype, this is what makes it a View
- '''
- def __init__(self, array, dtype, start, strides, shape):
+ def __init__(self, array, start, strides, shape):
self.array = array
- self.dtype = dtype
self.offset = start
self.skip = strides[0]
self.index = 0
@@ -219,13 +213,9 @@
return self.index
class MultiDimViewIterator(ConcreteArrayIterator):
- ''' The view iterator dtype can be different from the
- array.dtype, this is what makes it a View
- '''
- def __init__(self, array, dtype, start, strides, backstrides, shape):
+ def __init__(self, array, start, strides, backstrides, shape):
self.indexes = [0] * len(shape)
self.array = array
- self.dtype = dtype
self.shape = shape
self.offset = start
self.shapelen = len(shape)
@@ -295,14 +285,12 @@
self.offset = array.start
self.dim = dim
self.array = array
- self.dtype = array.dtype
def setitem(self, elem):
- self.dtype.setitem(self.array, self.offset, elem)
+ self.array.setitem(self.offset, elem)
def getitem(self):
- item = self.dtype.getitem(self.array, self.offset)
- return item
+ return self.array.getitem(self.offset)
@jit.unroll_safe
def next(self):
diff --git a/pypy/module/micronumpy/test/test_iter.py b/pypy/module/micronumpy/test/test_iter.py
--- a/pypy/module/micronumpy/test/test_iter.py
+++ b/pypy/module/micronumpy/test/test_iter.py
@@ -13,7 +13,7 @@
strides = [5, 1]
backstrides = [x * (y - 1) for x,y in zip(strides, shape)]
assert backstrides == [10, 4]
- i = MultiDimViewIterator(MockArray, None, start, strides, backstrides, shape)
+ i = MultiDimViewIterator(MockArray, start, strides, backstrides, shape)
i.next()
i.next()
i.next()
@@ -31,7 +31,7 @@
strides = [1, 3]
backstrides = [x * (y - 1) for x,y in zip(strides, shape)]
assert backstrides == [2, 12]
- i = MultiDimViewIterator(MockArray, None, start, strides, backstrides, shape)
+ i = MultiDimViewIterator(MockArray, start, strides, backstrides, shape)
i.next()
i.next()
i.next()
@@ -52,7 +52,7 @@
strides = [5, 1]
backstrides = [x * (y - 1) for x,y in zip(strides, shape)]
assert backstrides == [10, 4]
- i = MultiDimViewIterator(MockArray, None, start, strides, backstrides, shape)
+ i = MultiDimViewIterator(MockArray, start, strides, backstrides, shape)
i.next_skip_x(2)
i.next_skip_x(2)
i.next_skip_x(2)
@@ -75,7 +75,7 @@
strides = [1, 3]
backstrides = [x * (y - 1) for x,y in zip(strides, shape)]
assert backstrides == [2, 12]
- i = MultiDimViewIterator(MockArray, None, start, strides, backstrides, shape)
+ i = MultiDimViewIterator(MockArray, start, strides, backstrides, shape)
i.next_skip_x(2)
i.next_skip_x(2)
i.next_skip_x(2)
More information about the pypy-commit
mailing list