Author: Brian Kearns <bdkea...@gmail.com> Branch: Changeset: r69288:cd632d18a772 Date: 2014-02-23 13:50 -0500 http://bitbucket.org/pypy/pypy/changeset/cd632d18a772/
Log: fix segfault on np.fromstring of record type 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 @@ -3058,6 +3058,7 @@ v = fromstring("abcd", dtype="|S2") assert v[0] == "ab" assert v[1] == "cd" + v = fromstring('@\x01\x99\x99\x99\x99\x99\x9a\xbf\xf1\x99\x99\x99\x99\x99\x9a', dtype=dtype('>c16')) assert v.tostring() == \ @@ -3073,6 +3074,18 @@ assert v.real == 2.2 assert v.imag == -1.1 + d = [('f0', 'i4'), ('f1', 'u2', (2, 3))] + if '__pypy__' not in sys.builtin_module_names: + r = fromstring('abcdefghijklmnop'*4*3, dtype=d) + assert (r[0:3:2]['f1'] == r['f1'][0:3:2]).all() + assert (r[0:3:2]['f1'][0] == r[0:3:2][0]['f1']).all() + assert (r[0:3:2]['f1'][0][()] == r[0:3:2][0]['f1'][()]).all() + assert r[0:3:2]['f1'][0].strides == r[0:3:2][0]['f1'].strides + else: + exc = raises(NotImplementedError, fromstring, + 'abcdefghijklmnop'*4*3, dtype=d) + assert exc.value[0] == "fromstring not implemented for record types" + def test_fromstring_types(self): from numpypy import fromstring, array, dtype a = fromstring('\xFF', dtype='int8') 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 @@ -1,7 +1,7 @@ import functools import math -from pypy.interpreter.error import OperationError +from pypy.interpreter.error import OperationError, oefmt from pypy.module.micronumpy import interp_boxes from pypy.module.micronumpy import support from pypy.module.micronumpy.arrayimpl.voidbox import VoidBoxStorage @@ -1897,6 +1897,10 @@ itemtype.store(arr, 0, ofs, w_box) return interp_boxes.W_VoidBox(arr, 0, dtype) + def runpack_str(self, space, s): + raise oefmt(space.w_NotImplementedError, + "fromstring not implemented for record types") + def store(self, arr, i, ofs, box): assert isinstance(box, interp_boxes.W_VoidBox) self._store(arr.storage, i, ofs, box, box.dtype.get_size()) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit