Author: mattip Branch: numpypy-repr-fix Changeset: r50981:ee3e5819364d Date: 2012-01-03 00:11 +0200 http://bitbucket.org/pypy/pypy/changeset/ee3e5819364d/
Log: additional tests, fixes to pass them diff --git a/pypy/module/micronumpy/interp_numarray.py b/pypy/module/micronumpy/interp_numarray.py --- a/pypy/module/micronumpy/interp_numarray.py +++ b/pypy/module/micronumpy/interp_numarray.py @@ -422,8 +422,8 @@ else: concrete.to_str(space, 1, res, indent=' ') if (dtype is interp_dtype.get_dtype_cache(space).w_float64dtype or \ - dtype.kind == interp_dtype.SIGNEDLTR and \ - dtype.itemtype.get_element_size() == rffi.sizeof(lltype.Signed)) \ + dtype.kind == interp_dtype.SIGNEDLTR and \ + dtype.itemtype.get_element_size() == rffi.sizeof(lltype.Signed)) \ and self.size: # Do not print dtype pass @@ -844,6 +844,8 @@ each line will begin with indent. ''' size = self.size + ccomma = ',' * comma + ncomma = ',' * (1 - comma) dtype = self.find_dtype() if size < 1: builder.append('[]') @@ -857,30 +859,28 @@ use_ellipsis = True ndims = len(self.shape) i = 0 - start = True builder.append('[') if ndims > 1: if use_ellipsis: - for i in range(3): - if start: - start = False - else: - builder.append(',' * comma + '\n') - if ndims == 3: + for i in range(min(3, self.shape[0])): + if i > 0: + builder.append(ccomma + '\n') + if ndims >= 3: builder.append('\n' + indent) else: builder.append(indent) view = self.create_slice([(i, 0, 0, 1)]).get_concrete() view.to_str(space, comma, builder, indent=indent + ' ', use_ellipsis=use_ellipsis) - builder.append('\n' + indent + '..., ') - i = self.shape[0] - 3 + if i < self.shape[0] - 1: + builder.append(ccomma +'\n' + indent + '...' + ncomma) + i = self.shape[0] - 3 + else: + i += 1 while i < self.shape[0]: - if start: - start = False - else: - builder.append(',' * comma + '\n') - if ndims == 3: + if i > 0: + builder.append(ccomma + '\n') + if ndims >= 3: builder.append('\n' + indent) else: builder.append(indent) @@ -891,30 +891,29 @@ use_ellipsis=use_ellipsis) i += 1 elif ndims == 1: - spacer = ',' * comma + ' ' + spacer = ccomma + ' ' item = self.start # An iterator would be a nicer way to walk along the 1d array, but # how do I reset it if printing ellipsis? iterators have no # "set_offset()" i = 0 if use_ellipsis: - for i in range(3): - if start: - start = False - else: + for i in range(min(3, self.shape[0])): + if i > 0: builder.append(spacer) builder.append(dtype.itemtype.str_format(self.getitem(item))) item += self.strides[0] - # Add a comma only if comma is False - this prevents adding two - # commas - builder.append(spacer + '...' + ',' * (1 - comma)) - # Ugly, but can this be done with an iterator? - item = self.start + self.backstrides[0] - 2 * self.strides[0] - i = self.shape[0] - 3 + if i < self.shape[0] - 1: + # Add a comma only if comma is False - this prevents adding + # two commas + builder.append(spacer + '...' + ncomma) + # Ugly, but can this be done with an iterator? + item = self.start + self.backstrides[0] - 2 * self.strides[0] + i = self.shape[0] - 3 + else: + i += 1 while i < self.shape[0]: - if start: - start = False - else: + if i > 0: builder.append(spacer) builder.append(dtype.itemtype.str_format(self.getitem(item))) item += self.strides[0] 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 @@ -158,6 +158,7 @@ assert calc_new_strides([24], [2, 4, 3], [48, 6, 1]) is None assert calc_new_strides([24], [2, 4, 3], [24, 6, 2]) == [2] + class AppTestNumArray(BaseNumpyAppTest): def test_ndarray(self): from numpypy import ndarray, array, dtype @@ -725,19 +726,19 @@ a = identity(0) assert len(a) == 0 assert a.dtype == dtype('float64') - assert a.shape == (0,0) + assert a.shape == (0, 0) b = identity(1, dtype=int32) assert len(b) == 1 assert b[0][0] == 1 - assert b.shape == (1,1) + assert b.shape == (1, 1) assert b.dtype == dtype('int32') c = identity(2) - assert c.shape == (2,2) - assert (c == [[1,0],[0,1]]).all() + assert c.shape == (2, 2) + assert (c == [[1, 0], [0, 1]]).all() d = identity(3, dtype='int32') - assert d.shape == (3,3) + assert d.shape == (3, 3) assert d.dtype == dtype('int32') - assert (d == [[1,0,0],[0,1,0],[0,0,1]]).all() + assert (d == [[1, 0, 0], [0, 1, 0], [0, 0, 1]]).all() def test_prod(self): from numpypy import array @@ -954,13 +955,13 @@ def test_tolist_view(self): from numpypy import array - a = array([[1,2],[3,4]]) + a = array([[1, 2], [3, 4]]) assert (a + a).tolist() == [[2, 4], [6, 8]] def test_tolist_slice(self): from numpypy import array a = array([[17.1, 27.2], [40.3, 50.3]]) - assert a[:,0].tolist() == [17.1, 40.3] + assert a[:, 0].tolist() == [17.1, 40.3] assert a[0].tolist() == [17.1, 27.2] @@ -1090,11 +1091,11 @@ from numpypy import zeros, ones a = zeros((3, 3)) b = ones((3, 3)) - a[:,1:3] = b[:,1:3] + a[:, 1:3] = b[:, 1:3] assert (a == [[0, 1, 1], [0, 1, 1], [0, 1, 1]]).all() a = zeros((3, 3)) b = ones((3, 3)) - a[:,::2] = b[:,::2] + a[:, ::2] = b[:, ::2] assert (a == [[1, 0, 1], [1, 0, 1], [1, 0, 1]]).all() def test_broadcast_ufunc(self): @@ -1233,6 +1234,7 @@ assert isinstance(i['data'][0], int) raises(TypeError, getattr, array(3), '__array_interface__') + class AppTestSupport(BaseNumpyAppTest): def setup_class(cls): import struct @@ -1275,17 +1277,17 @@ assert g[1] == 2 assert g[2] == 3 h = fromstring("1, , 2, 3", dtype=uint8, sep=",") - assert (h == [1,0,2,3]).all() + assert (h == [1, 0, 2, 3]).all() i = fromstring("1 2 3", dtype=uint8, sep=" ") - assert (i == [1,2,3]).all() + assert (i == [1, 2, 3]).all() j = fromstring("1\t\t\t\t2\t3", dtype=uint8, sep="\t") - assert (j == [1,2,3]).all() + assert (j == [1, 2, 3]).all() k = fromstring("1,x,2,3", dtype=uint8, sep=",") - assert (k == [1,0]).all() + assert (k == [1, 0]).all() l = fromstring("1,x,2,3", dtype='float32', sep=",") - assert (l == [1.0,-1.0]).all() + assert (l == [1.0, -1.0]).all() m = fromstring("1,,2,3", sep=",") - assert (m == [1.0,-1.0,2.0,3.0]).all() + assert (m == [1.0, -1.0, 2.0, 3.0]).all() n = fromstring("3.4 2.0 3.8 2.2", dtype=int32, sep=" ") assert (n == [3]).all() o = fromstring("1.0 2f.0f 3.8 2.2", dtype=float32, sep=" ") @@ -1333,7 +1335,6 @@ j = fromstring(self.ulongval, dtype='L') assert j[0] == 12 - def test_fromstring_invalid(self): from numpypy import fromstring, uint16, uint8, int32 #default dtype is 64-bit float, so 3 bytes should fail @@ -1374,7 +1375,7 @@ assert repr(a) == "array(0.2)" def test_repr_multi(self): - from numpypy import array, zeros + from numpypy import arange, zeros a = zeros((3, 4)) assert repr(a) == '''array([[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], @@ -1387,6 +1388,16 @@ [[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]]])''' + a = arange(1002).reshape((2, 501)) + assert repr(a) == '''array([[0, 1, 2, ..., 498, 499, 500], + [501, 502, 503, ..., 999, 1000, 1001]])''' + assert repr(a.T) == '''array([[0, 501], + [1, 502], + [2, 503], + ..., + [498, 999], + [499, 1000], + [500, 1001]])''' def test_repr_slice(self): from numpypy import array, zeros @@ -1430,7 +1441,7 @@ a = zeros((400, 400), dtype=int) assert str(a) == "[[0 0 0 ..., 0 0 0]\n [0 0 0 ..., 0 0 0]\n" \ - " [0 0 0 ..., 0 0 0]\n ..., \n [0 0 0 ..., 0 0 0]\n" \ + " [0 0 0 ..., 0 0 0]\n ...,\n [0 0 0 ..., 0 0 0]\n" \ " [0 0 0 ..., 0 0 0]\n [0 0 0 ..., 0 0 0]]" a = zeros((2, 2, 2)) r = str(a) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit