Author: Ronan Lamy <[email protected]>
Branch: fix-result-types
Changeset: r77253:69a8e230abbe
Date: 2015-05-09 18:11 +0100
http://bitbucket.org/pypy/pypy/changeset/69a8e230abbe/
Log: Use find_result_type() instead of find_binop_result_dtype() in a few
places
diff --git a/pypy/module/micronumpy/arrayops.py
b/pypy/module/micronumpy/arrayops.py
--- a/pypy/module/micronumpy/arrayops.py
+++ b/pypy/module/micronumpy/arrayops.py
@@ -6,7 +6,7 @@
from pypy.module.micronumpy.converters import clipmode_converter
from pypy.module.micronumpy.strides import (
Chunk, Chunks, shape_agreement, shape_agreement_multiple)
-from .casting import find_binop_result_dtype
+from .casting import find_binop_result_dtype, find_result_type
def where(space, w_arr, w_x=None, w_y=None):
@@ -85,7 +85,7 @@
if arr.get_dtype().itemtype.bool(arr.get_scalar_value()):
return x
return y
- dtype = find_binop_result_dtype(space, x.get_dtype(), y.get_dtype())
+ dtype = find_result_type(space, [x, y], [])
shape = shape_agreement(space, arr.get_shape(), x)
shape = shape_agreement(space, shape, y)
out = W_NDimArray.from_shape(space, shape, dtype)
diff --git a/pypy/module/micronumpy/casting.py
b/pypy/module/micronumpy/casting.py
--- a/pypy/module/micronumpy/casting.py
+++ b/pypy/module/micronumpy/casting.py
@@ -37,6 +37,10 @@
def find_result_type(space, arrays_w, dtypes_w):
# equivalent to PyArray_ResultType
+ if len(arrays_w) == 1 and not dtypes_w:
+ return arrays_w[0].get_dtype()
+ elif not arrays_w and len(dtypes_w) == 1:
+ return dtypes_w[0]
result = None
for w_array in arrays_w:
result = find_binop_result_dtype(space, result, w_array.get_dtype())
diff --git a/pypy/module/micronumpy/descriptor.py
b/pypy/module/micronumpy/descriptor.py
--- a/pypy/module/micronumpy/descriptor.py
+++ b/pypy/module/micronumpy/descriptor.py
@@ -29,14 +29,12 @@
""" agree on dtype from a list of arrays. if out is allocated,
use it's dtype, otherwise allocate a new one with agreed dtype
"""
- from .casting import find_binop_result_dtype
+ from .casting import find_result_type
if not space.is_none(out):
return out
- dtype = None
- for w_arr in w_arr_list:
- if not space.is_none(w_arr):
- dtype = find_binop_result_dtype(space, dtype, w_arr.get_dtype())
+ arr_w = [w_arr for w_arr in w_arr_list if not space.is_none(w_arr)]
+ dtype = find_result_type(space, arr_w, [])
assert dtype is not None
out = W_NDimArray.from_shape(space, shape, dtype)
return out
diff --git a/pypy/module/micronumpy/ndarray.py
b/pypy/module/micronumpy/ndarray.py
--- a/pypy/module/micronumpy/ndarray.py
+++ b/pypy/module/micronumpy/ndarray.py
@@ -988,7 +988,7 @@
return space.newtuple([w_quotient, w_remainder])
def descr_dot(self, space, w_other, w_out=None):
- from .casting import find_binop_result_dtype
+ from .casting import find_result_type
if space.is_none(w_out):
out = None
elif not isinstance(w_out, W_NDimArray):
@@ -1003,8 +1003,7 @@
w_res = self.descr_mul(space, other)
assert isinstance(w_res, W_NDimArray)
return w_res.descr_sum(space, space.wrap(-1), out)
- dtype = find_binop_result_dtype(space, self.get_dtype(),
- other.get_dtype())
+ dtype = find_result_type(space, [self, other], [])
if self.get_size() < 1 and other.get_size() < 1:
# numpy compatability
return W_NDimArray.new_scalar(space, dtype, space.wrap(0))
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit