Author: Ronan Lamy <[email protected]>
Branch: unicode-dtype
Changeset: r78020:41c8a260855b
Date: 2015-06-10 19:48 +0100
http://bitbucket.org/pypy/pypy/changeset/41c8a260855b/
Log: Handle str() and repr() on unicode scalars
diff --git a/pypy/module/micronumpy/test/test_object_arrays.py
b/pypy/module/micronumpy/test/test_object_arrays.py
--- a/pypy/module/micronumpy/test/test_object_arrays.py
+++ b/pypy/module/micronumpy/test/test_object_arrays.py
@@ -171,4 +171,8 @@
assert 'a' * 100 in str(a)
b = a.astype('S')
assert 'a' * 100 in str(b)
-
+ a = np.array([123], dtype='U')
+ assert a[0] == u'123'
+ b = a.astype('O')
+ assert b[0] == u'123'
+ assert type(b[0]) is unicode
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
@@ -1,3 +1,4 @@
+# -*- encoding:utf-8 -*-
from pypy.module.micronumpy.test.test_base import BaseNumpyAppTest
class AppTestScalar(BaseNumpyAppTest):
@@ -462,9 +463,20 @@
from numpy import str_
assert isinstance(str_(3), str_)
assert str_(3) == '3'
+ assert str(str_(3)) == '3'
+ assert repr(str_(3)) == "'3'"
def test_unicode_boxes(self):
from numpy import unicode_
u = unicode_(3)
assert isinstance(u, unicode)
assert u == u'3'
+
+ def test_unicode_repr(self):
+ from numpy import unicode_
+ u = unicode_(3)
+ assert str(u) == '3'
+ assert repr(u) == "u'3'"
+ u = unicode_(u'Aÿ')
+ raises(UnicodeEncodeError, "str(u)")
+ assert repr(u) == repr(u'Aÿ')
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
@@ -2228,10 +2228,19 @@
return boxes.W_UnicodeBox(builder.build())
def str_format(self, item, add_quotes=True):
- raise NotImplementedError
+ assert isinstance(item, boxes.W_UnicodeBox)
+ if add_quotes:
+ w_unicode = self.to_builtin_type(self.space, item)
+ return self.space.str_w(self.space.repr(w_unicode))
+ else:
+ # Same as W_UnicodeBox.descr_repr() but without quotes and prefix
+ from rpython.rlib.runicode import unicode_encode_unicode_escape
+ return unicode_encode_unicode_escape(item._value,
+ len(item._value), 'strict')
def to_builtin_type(self, space, box):
- raise NotImplementedError
+ assert isinstance(box, boxes.W_UnicodeBox)
+ return space.wrap(box._value)
def eq(self, v1, v2):
assert isinstance(v1, boxes.W_UnicodeBox)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit