[pypy-commit] pypy fix-result-types: Fix casting table
rlamy
noreply at buildbot.pypy.org
Tue May 12 07:16:46 CEST 2015
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: fix-result-types
Changeset: r77295:5436f4d8b598
Date: 2015-05-12 05:45 +0100
http://bitbucket.org/pypy/pypy/changeset/5436f4d8b598/
Log: Fix casting table
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
@@ -90,7 +90,7 @@
if origin.kind in kind_ordering and target.kind in kind_ordering:
return kind_ordering[origin.kind] <= kind_ordering[target.kind]
return False
- else:
+ else: # 'safe'
return origin.can_cast_to(target)
def can_cast_array(space, w_from, target, casting):
diff --git a/pypy/module/micronumpy/test/test_casting.py b/pypy/module/micronumpy/test/test_casting.py
--- a/pypy/module/micronumpy/test/test_casting.py
+++ b/pypy/module/micronumpy/test/test_casting.py
@@ -1,7 +1,7 @@
from pypy.module.micronumpy.test.test_base import BaseNumpyAppTest
from pypy.module.micronumpy.descriptor import get_dtype_cache
from pypy.module.micronumpy.casting import (
- find_unaryop_result_dtype, find_binop_result_dtype)
+ find_unaryop_result_dtype, find_binop_result_dtype, can_cast_type)
class AppTestNumSupport(BaseNumpyAppTest):
@@ -27,6 +27,7 @@
assert np.can_cast(np.int32, np.int64)
assert np.can_cast(np.float64, complex)
assert not np.can_cast(np.complex64, float)
+ assert np.can_cast(np.bool_, np.bool_)
assert np.can_cast('i8', 'f8')
assert not np.can_cast('i8', 'f4')
@@ -123,6 +124,15 @@
# XXX: np.asarray(2**64) fails with OverflowError
# assert np.min_scalar_type(2**64) == np.dtype('O')
+def test_can_cast_same_type(space):
+ dt_bool = get_dtype_cache(space).w_booldtype
+ assert can_cast_type(space, dt_bool, dt_bool, 'no')
+ assert can_cast_type(space, dt_bool, dt_bool, 'equiv')
+ assert can_cast_type(space, dt_bool, dt_bool, 'safe')
+ assert can_cast_type(space, dt_bool, dt_bool, 'same_kind')
+ assert can_cast_type(space, dt_bool, dt_bool, 'unsafe')
+
+
class TestCoercion(object):
def test_binops(self, space):
bool_dtype = get_dtype_cache(space).w_booldtype
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
@@ -2439,7 +2439,7 @@
casting_table = [[False] * NPY.NTYPES for _ in range(NPY.NTYPES)]
number_types = int_types + float_types + complex_types
-all_types = number_types + [ObjectType, StringType, UnicodeType, VoidType]
+all_types = [Bool] + number_types + [ObjectType, StringType, UnicodeType, VoidType]
def enable_cast(type1, type2):
casting_table[type1.num][type2.num] = True
More information about the pypy-commit
mailing list