Skip to content

Commit 62083c0

Browse files
committed
update a test which relates to NEP-50
1 parent ad563c0 commit 62083c0

File tree

1 file changed

+31
-25
lines changed

1 file changed

+31
-25
lines changed

tests/third_party/cupy/test_type_routines.py

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,13 @@ class TestCanCast(unittest.TestCase):
3434
@testing.for_all_dtypes_combination(names=("from_dtype", "to_dtype"))
3535
@testing.numpy_cupy_equal()
3636
def test_can_cast(self, xp, from_dtype, to_dtype):
37-
if self.obj_type == "scalar":
37+
if (
38+
self.obj_type == "scalar"
39+
and numpy.lib.NumpyVersion(numpy.__version__) < "2.0.0"
40+
):
3841
pytest.skip("to be aligned with NEP-50")
3942

4043
from_obj = _generate_type_routines_input(xp, from_dtype, self.obj_type)
41-
4244
ret = xp.can_cast(from_obj, to_dtype)
4345
assert isinstance(ret, bool)
4446
return ret
@@ -92,37 +94,41 @@ class TestResultType(unittest.TestCase):
9294
@testing.for_all_dtypes_combination(names=("dtype1", "dtype2"))
9395
@testing.numpy_cupy_equal()
9496
def test_result_type(self, xp, dtype1, dtype2):
95-
if "scalar" in {self.obj_type1, self.obj_type2}:
97+
if (
98+
"scalar" in {self.obj_type1, self.obj_type2}
99+
and numpy.lib.NumpyVersion(numpy.__version__) < "2.0.0"
100+
):
96101
pytest.skip("to be aligned with NEP-50")
97102

98103
input1 = _generate_type_routines_input(xp, dtype1, self.obj_type1)
99-
100104
input2 = _generate_type_routines_input(xp, dtype2, self.obj_type2)
101105

102-
flag1 = isinstance(input1, (numpy.ndarray, cupy.ndarray))
103-
flag2 = isinstance(input2, (numpy.ndarray, cupy.ndarray))
104-
dt1 = cupy.dtype(input1) if not flag1 else None
105-
dt2 = cupy.dtype(input2) if not flag2 else None
106-
# dpnp takes into account device capabilities only if one of the
107-
# inputs is an array, for such a case, if the other dtype is not
108-
# supported by device, dpnp raise ValueError. So, we skip the test.
109-
if flag1 or flag2:
110-
if (
111-
dt1 in [cupy.float64, cupy.complex128]
112-
or dt2 in [cupy.float64, cupy.complex128]
113-
) and not has_support_aspect64():
114-
pytest.skip("No fp64 support by device.")
106+
flag1 = self.obj_type1 == "array" or self.obj_type2 == "array"
107+
flag2 = (self.obj_type1 == "primitive" and input1 == float) or (
108+
self.obj_type2 == "primitive" and input2 == float
109+
)
110+
# dpnp.result_type only takes into account device capabilities if
111+
# at least one of the inputs is an array, for such a case, if the other
112+
# input not supported by device, dpnp raises ValueError.
113+
# If input dtype is `float32` and the object is primitive, the final
114+
# dtype is `float` which needs a device with double precision support.
115+
# so we skip the test in such case, i.e. for a case when one input is
116+
# array and the other is a primitive obj with dtype 'float`.
117+
if flag1 and flag2 and not has_support_aspect64():
118+
pytest.skip("No fp64 support by device.")
115119

116120
ret = xp.result_type(input1, input2)
117121

118-
# dpnp takes into account device capabilities if one of the inputs
119-
# is an array, for such a case, we have to modify the results for
120-
# NumPy to align it with device capabilities.
121-
if (flag1 or flag2) and xp == numpy and not has_support_aspect64():
122-
ret = numpy.dtype(numpy.float32) if ret == numpy.float64 else ret
123-
ret = (
124-
numpy.dtype(numpy.complex64) if ret == numpy.complex128 else ret
125-
)
122+
# dpnp.result_type only takes into account device capabilities if at least one
123+
# of the inputs is an array, for such a case, we have to modify the
124+
# results for NumPy to align it with device capabilities.
125+
flag1 = isinstance(input1, numpy.ndarray)
126+
flag2 = isinstance(input2, numpy.ndarray)
127+
if (flag1 or flag2) and not has_support_aspect64():
128+
if ret == numpy.float64:
129+
ret = numpy.dtype(numpy.float32)
130+
elif ret == numpy.complex128:
131+
ret = numpy.dtype(numpy.complex64)
126132

127133
assert isinstance(ret, numpy.dtype)
128134
return ret

0 commit comments

Comments
 (0)