Author: Maciej Fijalkowski <[email protected]>
Branch: numpy-back-to-applevel
Changeset: r51807:e74b4e330798
Date: 2012-01-26 21:24 +0200
http://bitbucket.org/pypy/pypy/changeset/e74b4e330798/
Log: merge default. why oh why so many conflicts???
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
@@ -89,6 +89,19 @@
def descr_get_shape(self, space):
return space.newtuple([])
+ def eq(self, space, w_other):
+ if space.is_w(self, w_other):
+ return True
+ if space.isinstance_w(w_other, space.w_str):
+ return self.name == space.str_w(w_other)
+ return False
+
+ def descr_eq(self, space, w_other):
+ return space.wrap(self.eq(space, w_other))
+
+ def descr_ne(self, space, w_other):
+ return space.wrap(not self.eq(space, w_other))
+
def is_int_type(self):
return (self.kind == SIGNEDLTR or self.kind == UNSIGNEDLTR or
self.kind == BOOLLTR)
@@ -102,6 +115,8 @@
__str__= interp2app(W_Dtype.descr_str),
__repr__ = interp2app(W_Dtype.descr_repr),
+ __eq__ = interp2app(W_Dtype.descr_eq),
+ __ne__ = interp2app(W_Dtype.descr_ne),
num = interp_attrproperty("num", cls=W_Dtype),
kind = interp_attrproperty("kind", cls=W_Dtype),
diff --git a/pypy/module/micronumpy/strides.py
b/pypy/module/micronumpy/strides.py
--- a/pypy/module/micronumpy/strides.py
+++ b/pypy/module/micronumpy/strides.py
@@ -60,6 +60,29 @@
shape.append(size)
batch = new_batch
+def to_coords(space, shape, size, order, w_item_or_slice):
+ '''Returns a start coord, step, and length.
+ '''
+ start = lngth = step = 0
+ if not (space.isinstance_w(w_item_or_slice, space.w_int) or
+ space.isinstance_w(w_item_or_slice, space.w_slice)):
+ raise OperationError(space.w_IndexError,
+ space.wrap('unsupported iterator index'))
+
+ start, stop, step, lngth = space.decode_index4(w_item_or_slice, size)
+
+ coords = [0] * len(shape)
+ i = start
+ if order == 'C':
+ for s in range(len(shape) -1, -1, -1):
+ coords[s] = i % shape[s]
+ i //= shape[s]
+ else:
+ for s in range(len(shape)):
+ coords[s] = i % shape[s]
+ i //= shape[s]
+ return coords, step, lngth
+
def shape_agreement(space, shape1, shape2):
ret = _shape_agreement(shape1, shape2)
if len(ret) < max(len(shape1), len(shape2)):
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
@@ -9,6 +9,9 @@
assert d.num == 0
assert d.kind == 'b'
assert dtype('int8').num == 1
+ assert dtype('int8') == 'int8'
+ assert 'int8' == dtype('int8')
+ assert dtype('int8') != 3
assert dtype(d) is d
assert dtype(None) is dtype(float)
assert dtype('int8').name == 'int8'
diff --git a/pypy/module/micronumpy/test/test_numarray.py
b/pypy/module/micronumpy/test/test_numarray.py
--- a/pypy/module/micronumpy/test/test_numarray.py
+++ b/pypy/module/micronumpy/test/test_numarray.py
@@ -167,6 +167,24 @@
assert calc_new_strides([1, 1, 105, 1, 1], [7, 15], [1, 7],'F') == \
[1, 1, 1, 105, 105]
+ def test_to_coords(self):
+ from pypy.module.micronumpy.strides import to_coords
+
+ def _to_coords(index, order):
+ return to_coords(self.space, [2, 3, 4], 24, order,
+ self.space.wrap(index))[0]
+
+ assert _to_coords(0, 'C') == [0, 0, 0]
+ assert _to_coords(1, 'C') == [0, 0, 1]
+ assert _to_coords(-1, 'C') == [1, 2, 3]
+ assert _to_coords(5, 'C') == [0, 1, 1]
+ assert _to_coords(13, 'C') == [1, 0, 1]
+ assert _to_coords(0, 'F') == [0, 0, 0]
+ assert _to_coords(1, 'F') == [1, 0, 0]
+ assert _to_coords(-1, 'F') == [1, 2, 3]
+ assert _to_coords(5, 'F') == [1, 2, 0]
+ assert _to_coords(13, 'F') == [1, 0, 2]
+
class AppTestNumArray(BaseNumpyAppTest):
def test_ndarray(self):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit