Author: Matti Picus <[email protected]>
Branch:
Changeset: r61714:ae156bb1fb56
Date: 2013-02-24 01:10 +0200
http://bitbucket.org/pypy/pypy/changeset/ae156bb1fb56/
Log: better handling of string dtypes
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
@@ -164,8 +164,11 @@
def is_record_type(self):
return self.fields is not None
+ def is_str_or_unicode(self):
+ return (self.num == 18 or self.num == 19)
+
def is_flexible_type(self):
- return (self.num == 18 or self.num == 19 or self.num == 20)
+ return (self.is_str_or_unicode() or self.is_record_type())
def __repr__(self):
if self.fields is not None:
@@ -526,7 +529,7 @@
self.w_longdouble = self.w_float64dtype
self.w_clongdouble = self.w_complex128dtype
self.w_stringdtype = W_Dtype(
- types.StringType(1),
+ types.StringType(0),
num=18,
kind=STRINGLTR,
name='string',
diff --git a/pypy/module/micronumpy/interp_numarray.py
b/pypy/module/micronumpy/interp_numarray.py
--- a/pypy/module/micronumpy/interp_numarray.py
+++ b/pypy/module/micronumpy/interp_numarray.py
@@ -932,7 +932,8 @@
return w_object
shape, elems_w = find_shape_and_elems(space, w_object, dtype)
- if dtype is None:
+ if dtype is None or (
+ dtype.is_str_or_unicode() and dtype.itemtype.get_size() < 1):
for w_elem in elems_w:
dtype = interp_ufuncs.find_dtype_for_scalar(space, w_elem,
dtype)
@@ -941,6 +942,9 @@
if dtype is None:
dtype = interp_dtype.get_dtype_cache(space).w_float64dtype
+ if dtype.is_str_or_unicode() and dtype.itemtype.get_size() < 1:
+ # promote S0 -> S1, U0 -> U1
+ dtype = interp_dtype.variable_dtype(space, dtype.char + '1')
if ndmin > len(shape):
shape = [1] * (ndmin - len(shape)) + shape
arr = W_NDimArray.from_shape(shape, dtype, order=order)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit