[pypy-commit] pypy unicode-dtype: Reimplement W_UnicodeBox as a simple wrapper around an interp-level unicode object
rlamy
noreply at buildbot.pypy.org
Fri Jun 5 19:30:01 CEST 2015
Author: Ronan Lamy <ronan.lamy at 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'
More information about the pypy-commit
mailing list