Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r77425:81a9cd687854 Date: 2015-05-20 11:09 +0200 http://bitbucket.org/pypy/pypy/changeset/81a9cd687854/
Log: merge heads diff --git a/pypy/doc/whatsnew-head.rst b/pypy/doc/whatsnew-head.rst --- a/pypy/doc/whatsnew-head.rst +++ b/pypy/doc/whatsnew-head.rst @@ -114,3 +114,7 @@ branch numpy-flags Finish implementation of ndarray.flags, including str() and repr() + +.. branch: cffi-1.0 + +PyPy now includes CFFI 1.0. diff --git a/pypy/module/_cffi_backend/test/test_file.py b/pypy/module/_cffi_backend/test/test_file.py --- a/pypy/module/_cffi_backend/test/test_file.py +++ b/pypy/module/_cffi_backend/test/test_file.py @@ -20,7 +20,8 @@ from pypy.module._cffi_backend import VERSION line = "Version: %s\n" % VERSION eggfile = py.path.local(__file__).join('..', '..', '..', '..', '..', - 'lib_pypy', 'cffi.egg-info') + 'lib_pypy', 'cffi.egg-info', + 'PKG-INFO') assert line in eggfile.readlines() def test_app_version(): diff --git a/pypy/module/cpyext/api.py b/pypy/module/cpyext/api.py --- a/pypy/module/cpyext/api.py +++ b/pypy/module/cpyext/api.py @@ -1110,6 +1110,10 @@ trunk_include = pypydir.dirpath() / 'include' copy_header_files(trunk_include) +def _load_from_cffi(space, name, path, initptr): + from pypy.module._cffi_backend import cffi1_module + cffi1_module.load_cffi1_module(space, name, path, initptr) + @unwrap_spec(path=str, name=str) def load_extension_module(space, path, name): # note: this is used both to load CPython-API-style C extension @@ -1142,8 +1146,7 @@ pass else: try: - from pypy.module._cffi_backend import cffi1_module - cffi1_module.load_cffi1_module(space, name, path, initptr) + _load_from_cffi(space, name, path, initptr) except: rdynload.dlclose(dll) raise diff --git a/pypy/module/micronumpy/boxes.py b/pypy/module/micronumpy/boxes.py --- a/pypy/module/micronumpy/boxes.py +++ b/pypy/module/micronumpy/boxes.py @@ -193,7 +193,7 @@ "'%T' object is not iterable", self) def descr_str(self, space): - return space.wrap(self.get_dtype(space).itemtype.str_format(self)) + return space.wrap(self.get_dtype(space).itemtype.str_format(self, add_quotes=False)) def descr_format(self, space, w_spec): return space.format(self.item(space), w_spec) 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 @@ -277,7 +277,7 @@ if self.is_scalar() and dtype.is_str(): s.append(dtype.itemtype.to_str(i.getitem(state))) else: - s.append(dtype.itemtype.str_format(i.getitem(state))) + s.append(dtype.itemtype.str_format(i.getitem(state), add_quotes=True)) state = i.next(state) if not self.is_scalar(): s.append(']') 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 @@ -3468,6 +3468,9 @@ assert str(array('abc')) == 'abc' assert str(array(1.5)) == '1.5' assert str(array(1.5).real) == '1.5' + arr = array(['abc', 'abc']) + for a in arr.flat: + assert str(a) == 'abc' def test_ndarray_buffer_strides(self): from numpy import ndarray, array 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 @@ -388,7 +388,7 @@ def to_builtin_type(self, space, w_item): return space.wrap(self.unbox(w_item)) - def str_format(self, box): + def str_format(self, box, add_quotes=True): return "True" if self.unbox(box) else "False" @staticmethod @@ -454,7 +454,7 @@ def _coerce(self, space, w_item): return self._base_coerce(space, w_item) - def str_format(self, box): + def str_format(self, box, add_quotes=True): return str(self.for_computation(self.unbox(box))) @staticmethod @@ -727,7 +727,7 @@ return self.box(rfloat.NAN) return self.box(space.float_w(space.call_function(space.w_float, w_item))) - def str_format(self, box): + def str_format(self, box, add_quotes=True): return float2string(self.for_computation(self.unbox(box)), "g", rfloat.DTSF_STR_PRECISION) @@ -1132,7 +1132,7 @@ w_obj.__init__(w_tmpobj.real, w_tmpobj.imag) return w_obj - def str_format(self, box): + def str_format(self, box, add_quotes=True): real, imag = self.for_computation(self.unbox(box)) imag_str = str_format(imag) if not rfloat.isfinite(imag): @@ -1862,7 +1862,7 @@ w_obj = self.space.newcomplex(real, imag) return self.BoxType(w_obj) - def str_format(self, box): + def str_format(self, box, add_quotes=True): return self.space.str_w(self.space.repr(self.unbox(box))) def runpack_str(self, space, s): @@ -2122,11 +2122,13 @@ dtype = arr.dtype return boxes.W_StringBox(arr, i + offset, dtype) - def str_format(self, item): + def str_format(self, item, add_quotes=True): builder = StringBuilder() - builder.append("'") + if add_quotes: + builder.append("'") builder.append(self.to_str(item)) - builder.append("'") + if add_quotes: + builder.append("'") return builder.build() # XXX move the rest of this to base class when UnicodeType is supported @@ -2209,7 +2211,7 @@ def read(self, arr, i, offset, dtype=None): raise oefmt(self.space.w_NotImplementedError, "unicode type not completed") - def str_format(self, item): + def str_format(self, item, add_quotes=True): raise oefmt(self.space.w_NotImplementedError, "unicode type not completed") def to_builtin_type(self, space, box): @@ -2314,7 +2316,7 @@ return boxes.W_VoidBox(arr, i + offset, dtype) @jit.unroll_safe - def str_format(self, box): + def str_format(self, box, add_quotes=True): assert isinstance(box, boxes.W_VoidBox) arr = self.readarray(box.arr, box.ofs, 0, box.dtype) return arr.dump_data(prefix='', suffix='') @@ -2425,7 +2427,7 @@ return space.newtuple(items) @jit.unroll_safe - def str_format(self, box): + def str_format(self, box, add_quotes=True): assert isinstance(box, boxes.W_VoidBox) pieces = ["("] first = True @@ -2437,7 +2439,7 @@ else: pieces.append(", ") val = tp.read(box.arr, box.ofs, ofs, subdtype) - pieces.append(tp.str_format(val)) + pieces.append(tp.str_format(val, add_quotes=add_quotes)) pieces.append(")") return "".join(pieces) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit