Author: Ronan Lamy <ronan.l...@gmail.com> Branch: unicode-dtype Changeset: r77920:fdc675061202 Date: 2015-06-05 18:29 +0100 http://bitbucket.org/pypy/pypy/changeset/fdc675061202/
Log: Reimplement W_UnicodeBox as a simple wrapper around an interp-level unicode object 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 @@ -606,15 +606,25 @@ return W_StringBox(arr, 0, arr.dtype) class W_UnicodeBox(W_CharacterBox): + def __init__(self, value): + self._value = value + + def convert_to(self, space, dtype): + if dtype.is_unicode(): + return self + elif dtype.is_object(): + return W_ObjectBox(space.wrap(self._value)) + else: + raise oefmt(space.w_NotImplementedError, + "Conversion from unicode not implemented yet") + + def get_dtype(self, space): + from pypy.module.micronumpy.descriptor import new_unicode_dtype + return new_unicode_dtype(space, len(self._value)) + def descr__new__unicode_box(space, w_subtype, w_arg): - from pypy.module.micronumpy.descriptor import new_unicode_dtype - arg = space.unicode_w(space.unicode_from_object(w_arg)) - # XXX size computations, we need tests anyway - arr = VoidBoxStorage(len(arg), new_unicode_dtype(space, len(arg))) - # XXX not this way, we need store - #for i in range(len(arg)): - # arr.storage[i] = arg[i] - return W_UnicodeBox(arr, 0, arr.dtype) + value = space.unicode_w(space.unicode_from_object(w_arg)) + return W_UnicodeBox(value) class W_ObjectBox(W_GenericBox): descr__new__, _get_dtype, descr_reduce = new_dtype_getter(NPY.OBJECT) 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 @@ -1052,16 +1052,6 @@ assert d.name == "unicode256" assert d.num == 19 - def test_string_boxes(self): - from numpy import str_ - assert isinstance(str_(3), str_) - - def test_unicode_boxes(self): - from numpy import unicode_ - import sys - u = unicode_(3) - assert isinstance(u, unicode) - def test_character_dtype(self): import numpy as np from numpy import array, character diff --git a/pypy/module/micronumpy/test/test_scalar.py b/pypy/module/micronumpy/test/test_scalar.py --- a/pypy/module/micronumpy/test/test_scalar.py +++ b/pypy/module/micronumpy/test/test_scalar.py @@ -457,3 +457,14 @@ for t in complex64, complex128: _do_test(t, 17j, -17j) + + def test_string_boxes(self): + from numpy import str_ + assert isinstance(str_(3), str_) + assert str_(3) == '3' + + def test_unicode_boxes(self): + from numpy import unicode_ + u = unicode_(3) + assert isinstance(u, unicode) + assert u == u'3' _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit