[pypy-commit] pypy default: Implement dtype.str. Try hard to do the same as cNumpy.
amauryfa
noreply at buildbot.pypy.org
Thu Jun 13 23:48:17 CEST 2013
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch:
Changeset: r64878:96ef4e26e420
Date: 2013-06-13 23:47 +0200
http://bitbucket.org/pypy/pypy/changeset/96ef4e26e420/
Log: Implement dtype.str. Try hard to do the same as cNumpy.
diff --git a/pypy/module/micronumpy/interp_dtype.py b/pypy/module/micronumpy/interp_dtype.py
--- a/pypy/module/micronumpy/interp_dtype.py
+++ b/pypy/module/micronumpy/interp_dtype.py
@@ -115,6 +115,21 @@
return space.wrap('=')
return space.wrap(nonnative_byteorder_prefix)
+ def descr_get_str(self, space):
+ size = self.get_size()
+ basic = self.kind
+ if basic == UNICODELTR:
+ size >>= 2
+ endian = byteorder_prefix
+ elif size <= 1:
+ endian = '|' # ignore
+ elif self.native:
+ endian = byteorder_prefix
+ else:
+ endian = nonnative_byteorder_prefix
+
+ return space.wrap("%s%s%s" % (endian, basic, size))
+
def descr_get_alignment(self, space):
return space.wrap(self.itemtype.alignment)
@@ -421,6 +436,7 @@
char = interp_attrproperty("char", cls=W_Dtype),
type = interp_attrproperty_w("w_box_type", cls=W_Dtype),
byteorder = GetSetProperty(W_Dtype.descr_get_byteorder),
+ str = GetSetProperty(W_Dtype.descr_get_str),
itemsize = GetSetProperty(W_Dtype.descr_get_itemsize),
alignment = GetSetProperty(W_Dtype.descr_get_alignment),
shape = GetSetProperty(W_Dtype.descr_get_shape),
@@ -666,7 +682,7 @@
aliases=["str"],
)
self.w_unicodedtype = W_Dtype(
- types.UnicodeType(1),
+ types.UnicodeType(0),
num=19,
kind=UNICODELTR,
name='unicode',
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
@@ -683,6 +683,20 @@
assert dtype('=i8').byteorder == '='
assert dtype(byteorder + 'i8').byteorder == '='
+ def test_dtype_str(self):
+ from numpypy import dtype
+ byteorder = self.native_prefix
+ assert dtype('i8').str == byteorder + 'i8'
+ assert dtype('<i8').str == '<i8'
+ assert dtype('>i8').str == '>i8'
+ assert dtype('int8').str == '|i1'
+ assert dtype('float').str == byteorder + 'f8'
+ # strange
+ assert dtype('string').str == '|S0'
+ assert dtype('unicode').str == byteorder + 'U0'
+ # assert dtype(('string', 7)).str == '|S7'
+ # assert dtype(('unicode', 7)).str == '<U7'
+
def test_intp(self):
from numpypy import dtype
assert dtype('p') == dtype('intp')
More information about the pypy-commit
mailing list