Skip to content

Commit a516f1c

Browse files
authored
dpnp.subtract() doesn't work properly with a scalar (#1292)
* dpnp.add() doesn't work properly with a scalar * dpnp.subtract() doesn't work properly with a scalar * USM type in operations with a scalar * Rollback excluded 'floor_divide' tests from skip scope * Explicit vector operations instead of saturation functions * Use std::int32_t and std::int64_t types * Tune tail's loop of kernel for the vector op
1 parent 439f2b5 commit a516f1c

File tree

11 files changed

+225
-201
lines changed

11 files changed

+225
-201
lines changed

dpnp/backend/include/dpnp_gen_2arg_3type_tbl.hpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@
111111

112112
MACRO_2ARG_3TYPES_OP(dpnp_add_c,
113113
input1_elem + input2_elem,
114-
sycl::add_sat(x1, x2),
115-
MACRO_UNPACK_TYPES(int, long),
114+
x1 + x2,
115+
MACRO_UNPACK_TYPES(bool, std::int32_t, std::int64_t),
116116
oneapi::mkl::vm::add,
117117
MACRO_UNPACK_TYPES(float, double, std::complex<float>, std::complex<double>))
118118

@@ -170,8 +170,8 @@ MACRO_2ARG_3TYPES_OP(dpnp_minimum_c,
170170
// requires multiplication shape1[10] with shape2[10,1] and result expected as shape[10,10]
171171
MACRO_2ARG_3TYPES_OP(dpnp_multiply_c,
172172
input1_elem* input2_elem,
173-
nullptr,
174-
std::false_type,
173+
x1 * x2,
174+
MACRO_UNPACK_TYPES(bool, std::int32_t, std::int64_t),
175175
oneapi::mkl::vm::mul,
176176
MACRO_UNPACK_TYPES(float, double, std::complex<float>, std::complex<double>))
177177

@@ -184,9 +184,9 @@ MACRO_2ARG_3TYPES_OP(dpnp_power_c,
184184

185185
MACRO_2ARG_3TYPES_OP(dpnp_subtract_c,
186186
input1_elem - input2_elem,
187-
nullptr,
188-
std::false_type,
187+
x1 - x2,
188+
MACRO_UNPACK_TYPES(bool, std::int32_t, std::int64_t),
189189
oneapi::mkl::vm::sub,
190-
MACRO_UNPACK_TYPES(float, double))
190+
MACRO_UNPACK_TYPES(float, double, std::complex<float>, std::complex<double>))
191191

192192
#undef MACRO_2ARG_3TYPES_OP

dpnp/backend/kernels/dpnp_krnl_elemwise.cpp

Lines changed: 55 additions & 87 deletions
Large diffs are not rendered by default.

dpnp/dpnp_array.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,9 @@ def __rmul__(self, other):
273273
# '__rpow__',
274274
# '__rrshift__',
275275
# '__rshift__',
276-
# '__rsub__',
276+
277+
def __rsub__(self, other):
278+
return dpnp.subtract(other, self)
277279

278280
def __rtruediv__(self, other):
279281
return dpnp.true_divide(other, self)

dpnp/dpnp_iface_mathematical.py

Lines changed: 47 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ def add(x1,
215215
if x1_desc and x2_desc:
216216
return dpnp_add(x1_desc, x2_desc, dtype=dtype, out=out, where=where).get_pyobj()
217217

218-
return call_origin(numpy.add, x1, x2, dtype=dtype, out=out, where=where, **kwargs)
218+
return call_origin(numpy.add, x1, x2, out=out, where=where, dtype=dtype, subok=subok, **kwargs)
219219

220220

221221
def around(x1, decimals=0, out=None):
@@ -1145,7 +1145,7 @@ def multiply(x1,
11451145
if x1_desc and x2_desc:
11461146
return dpnp_multiply(x1_desc, x2_desc, dtype=dtype, out=out, where=where).get_pyobj()
11471147

1148-
return call_origin(numpy.multiply, x1, x2, dtype=dtype, out=out, where=where, **kwargs)
1148+
return call_origin(numpy.multiply, x1, x2, out=out, where=where, dtype=dtype, subok=subok, **kwargs)
11491149

11501150

11511151
def nancumprod(x1, **kwargs):
@@ -1520,60 +1520,69 @@ def sign(x1, **kwargs):
15201520
return call_origin(numpy.sign, x1, **kwargs)
15211521

15221522

1523-
def subtract(x1, x2, dtype=None, out=None, where=True, **kwargs):
1523+
def subtract(x1,
1524+
x2,
1525+
/,
1526+
out=None,
1527+
*,
1528+
where=True,
1529+
dtype=None,
1530+
subok=True,
1531+
**kwargs):
15241532
"""
15251533
Subtract arguments, element-wise.
15261534
15271535
For full documentation refer to :obj:`numpy.subtract`.
15281536
1537+
Returns
1538+
-------
1539+
y : dpnp.ndarray
1540+
The difference of `x1` and `x2`, element-wise.
1541+
15291542
Limitations
15301543
-----------
1531-
Parameters ``x1`` and ``x2`` are supported as either :obj:`dpnp.ndarray` or scalar.
1532-
Parameters ``dtype``, ``out`` and ``where`` are supported with their default values.
1544+
Parameters `x1` and `x2` are supported as either :class:`dpnp.ndarray` or scalar,
1545+
but not both (at least either `x1` or `x2` should be as :class:`dpnp.ndarray`).
1546+
Parameters `out`, `where`, `dtype` and `subok` are supported with their default values.
15331547
Keyword arguments ``kwargs`` are currently unsupported.
1534-
Otherwise the functions will be executed sequentially on CPU.
1548+
Otherwise the function will be executed sequentially on CPU.
15351549
Input array data types are limited by supported DPNP :ref:`Data types`.
15361550
15371551
Example
15381552
-------
1539-
>>> import dpnp as np
1540-
>>> result = np.subtract(np.array([4, 3]), np.array([2, 7]))
1541-
>>> [x for x in result]
1553+
>>> import dpnp as dp
1554+
>>> result = dp.subtract(dp.array([4, 3]), dp.array([2, 7]))
1555+
>>> print(result)
15421556
[2, -4]
15431557
15441558
"""
15451559

1546-
x1_is_scalar = dpnp.isscalar(x1)
1547-
x2_is_scalar = dpnp.isscalar(x2)
1548-
x1_desc = dpnp.get_dpnp_descriptor(x1, copy_when_strides=False, copy_when_nondefault_queue=False)
1549-
x2_desc = dpnp.get_dpnp_descriptor(x2, copy_when_strides=False, copy_when_nondefault_queue=False)
1560+
if out is not None:
1561+
pass
1562+
elif where is not True:
1563+
pass
1564+
elif dtype is not None:
1565+
pass
1566+
elif subok is not True:
1567+
pass
1568+
elif dpnp.isscalar(x1) and dpnp.isscalar(x2):
1569+
# at least either x1 or x2 has to be an array
1570+
pass
1571+
else:
1572+
# get USM type and queue to copy scalar from the host memory into a USM allocation
1573+
usm_type, queue = get_usm_allocations([x1, x2]) if dpnp.isscalar(x1) or dpnp.isscalar(x2) else (None, None)
15501574

1551-
if x1_desc and x2_desc and not kwargs:
1552-
if not x1_desc and not x1_is_scalar:
1553-
pass
1554-
elif not x2_desc and not x2_is_scalar:
1555-
pass
1556-
elif x1_is_scalar and x2_is_scalar:
1557-
pass
1558-
elif x1_desc and x1_desc.ndim == 0:
1559-
pass
1560-
elif x1_desc and x1_desc.dtype == dpnp.bool:
1561-
pass
1562-
elif x2_desc and x2_desc.ndim == 0:
1563-
pass
1564-
elif x2_desc and x2_desc.dtype == dpnp.bool:
1565-
pass
1566-
elif dtype is not None:
1567-
pass
1568-
elif out is not None:
1569-
pass
1570-
elif not where:
1571-
pass
1572-
else:
1573-
out_desc = dpnp.get_dpnp_descriptor(out, copy_when_nondefault_queue=False) if out is not None else None
1574-
return dpnp_subtract(x1_desc, x2_desc, dtype=dtype, out=out_desc, where=where).get_pyobj()
1575+
x1_desc = dpnp.get_dpnp_descriptor(x1, copy_when_strides=False, copy_when_nondefault_queue=False,
1576+
alloc_usm_type=usm_type, alloc_queue=queue)
1577+
x2_desc = dpnp.get_dpnp_descriptor(x2, copy_when_strides=False, copy_when_nondefault_queue=False,
1578+
alloc_usm_type=usm_type, alloc_queue=queue)
1579+
if x1_desc and x2_desc:
1580+
if x1_desc.dtype == x2_desc.dtype == dpnp.bool:
1581+
raise TypeError("DPNP boolean subtract, the `-` operator, is not supported, "
1582+
"use the bitwise_xor, the `^` operator, or the logical_xor function instead.")
1583+
return dpnp_subtract(x1_desc, x2_desc, dtype=dtype, out=out, where=where).get_pyobj()
15751584

1576-
return call_origin(numpy.subtract, x1, x2, dtype=dtype, out=out, where=where, **kwargs)
1585+
return call_origin(numpy.subtract, x1, x2, out=out, where=where, dtype=dtype, subok=subok, **kwargs)
15771586

15781587

15791588
def sum(x1, axis=None, dtype=None, out=None, keepdims=False, initial=None, where=True):

tests/skipped_tests.tbl

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ tests/third_party/cupy/creation_tests/test_from_data.py::TestFromData::test_asar
389389
tests/third_party/cupy/creation_tests/test_from_data.py::TestFromData::test_ascontiguousarray_on_noncontiguous_array
390390
tests/third_party/cupy/creation_tests/test_from_data.py::TestFromData::test_asfortranarray_cuda_array_zero_dim
391391
tests/third_party/cupy/creation_tests/test_from_data.py::TestFromData::test_asfortranarray_cuda_array_zero_dim_dtype
392-
tests/third_party/cupy/creation_tests/test_from_data.py::TestFromData::test_fromfile
392+
393393
tests/third_party/cupy/creation_tests/test_ranges.py::TestMeshgrid_param_0_{copy=False, indexing='xy', sparse=False}::test_meshgrid0
394394
tests/third_party/cupy/creation_tests/test_ranges.py::TestMeshgrid_param_0_{copy=False, indexing='xy', sparse=False}::test_meshgrid1
395395
tests/third_party/cupy/creation_tests/test_ranges.py::TestMeshgrid_param_0_{copy=False, indexing='xy', sparse=False}::test_meshgrid2
@@ -765,17 +765,15 @@ tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_para
765765
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_param_547_{arg1=array([[1, 2, 3], [4, 5, 6]]), arg2=array([[0, 1, 2], [3, 4, 5]]), dtype=float64, name='remainder', use_dtype=False}::test_binary
766766
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_param_549_{arg1=array([[1, 2, 3], [4, 5, 6]]), arg2=array([[0, 1, 2], [3, 4, 5]]), dtype=float64, name='mod', use_dtype=False}::test_binary
767767
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticModf::test_modf
768-
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_0_{name='reciprocal', nargs=1}::test_raises_with_numpy_input
768+
769769
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_10_{name='remainder', nargs=2}::test_raises_with_numpy_input
770770
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_11_{name='mod', nargs=2}::test_raises_with_numpy_input
771771
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_1_{name='angle', nargs=1}::test_raises_with_numpy_input
772772
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_4_{name='divide', nargs=2}::test_raises_with_numpy_input
773773
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_5_{name='power', nargs=2}::test_raises_with_numpy_input
774-
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_6_{name='subtract', nargs=2}::test_raises_with_numpy_input
775774
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_7_{name='true_divide', nargs=2}::test_raises_with_numpy_input
776775
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_8_{name='floor_divide', nargs=2}::test_raises_with_numpy_input
777-
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_9_{name='fmod', nargs=2}::test_raises_with_numpy_input
778-
tests/third_party/cupy/math_tests/test_arithmetic.py::TestBoolSubtract_param_3_{shape=(), xp=dpnp}::test_bool_subtract
776+
779777
tests/third_party/cupy/math_tests/test_explog.py::TestExplog::test_logaddexp
780778
tests/third_party/cupy/math_tests/test_explog.py::TestExplog::test_logaddexp2
781779
tests/third_party/cupy/math_tests/test_floating.py::TestFloating::test_copysign_float

tests/skipped_tests_gpu.tbl

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ tests/test_sycl_queue.py::test_1in_1out[opencl:gpu:0-conjugate-data2]
1818
tests/test_sycl_queue.py::test_1in_1out[opencl:gpu:0-copy-data3]
1919
tests/test_sycl_queue.py::test_1in_1out[opencl:gpu:0-cumprod-data4]
2020
tests/test_sycl_queue.py::test_1in_1out[opencl:gpu:0-cumsum-data5]
21-
tests/test_sycl_queue.py::test_1in_1out[opencl:gpu:0-diff-data6]
2221
tests/test_sycl_queue.py::test_1in_1out[opencl:gpu:0-ediff1d-data7]
2322
tests/test_sycl_queue.py::test_1in_1out[opencl:gpu:0-fabs-data8]
2423
tests/test_sycl_queue.py::test_1in_1out[opencl:gpu:0-floor-data9]
@@ -29,11 +28,9 @@ tests/test_sycl_queue.py::test_1in_1out[level_zero:gpu:0-conjugate-data2]
2928
tests/test_sycl_queue.py::test_1in_1out[level_zero:gpu:0-copy-data3]
3029
tests/test_sycl_queue.py::test_1in_1out[level_zero:gpu:0-cumprod-data4]
3130
tests/test_sycl_queue.py::test_1in_1out[level_zero:gpu:0-cumsum-data5]
32-
tests/test_sycl_queue.py::test_1in_1out[level_zero:gpu:0-diff-data6]
3331
tests/test_sycl_queue.py::test_1in_1out[level_zero:gpu:0-ediff1d-data7]
3432
tests/test_sycl_queue.py::test_1in_1out[level_zero:gpu:0-fabs-data8]
3533
tests/test_sycl_queue.py::test_1in_1out[level_zero:gpu:0-floor-data9]
36-
tests/test_sycl_queue.py::test_1in_1out[level_zero:gpu:0-gradient-data10]
3734
tests/test_sycl_queue.py::test_1in_1out[level_zero:gpu:0-nancumprod-data11]
3835
tests/test_sycl_queue.py::test_1in_1out[level_zero:gpu:0-nancumsum-data12]
3936
tests/test_sycl_queue.py::test_1in_1out[level_zero:gpu:0-nanprod-data13]
@@ -91,6 +88,7 @@ tests/third_party/cupy/indexing_tests/test_insert.py::TestDiagIndicesInvalidValu
9188
tests/third_party/cupy/indexing_tests/test_insert.py::TestDiagIndicesFrom_param_0_{shape=(3, 3)}::test_diag_indices_from
9289
tests/third_party/cupy/indexing_tests/test_insert.py::TestDiagIndicesFrom_param_1_{shape=(0, 0)}::test_diag_indices_from
9390
tests/third_party/cupy/indexing_tests/test_insert.py::TestDiagIndicesFrom_param_2_{shape=(2, 2, 2)}::test_diag_indices_from
91+
9492
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_param_295_{arg1=array([[1., 2., 3.], [4., 5., 6.]], dtype=float32), arg2=array([[0, 1, 2], [3, 4, 5]]), dtype=float64, name='floor_divide', use_dtype=False}::test_binary
9593
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_param_303_{arg1=array([[1., 2., 3.], [4., 5., 6.]], dtype=float32), arg2=array([[0, 1, 2], [3, 4, 5]], dtype=int64), dtype=float64, name='floor_divide', use_dtype=False}::test_binary
9694
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_param_375_{arg1=array([[1., 2., 3.], [4., 5., 6.]]), arg2=array([[0, 1, 2], [3, 4, 5]]), dtype=float64, name='floor_divide', use_dtype=False}::test_binary
@@ -103,6 +101,7 @@ tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_para
103101
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_param_527_{arg1=array([[1, 2, 3], [4, 5, 6]], dtype=int64), arg2=array([[0., 1., 2.], [3., 4., 5.]]), dtype=float64, name='floor_divide', use_dtype=False}::test_binary
104102
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_param_535_{arg1=array([[1, 2, 3], [4, 5, 6]], dtype=int64), arg2=array([[0, 1, 2], [3, 4, 5]]), dtype=float64, name='floor_divide', use_dtype=False}::test_binary
105103
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_param_543_{arg1=array([[1, 2, 3], [4, 5, 6]], dtype=int64), arg2=array([[0, 1, 2], [3, 4, 5]], dtype=int64), dtype=float64, name='floor_divide', use_dtype=False}::test_binary
104+
106105
tests/third_party/cupy/math_tests/test_sumprod.py::TestSumprod::test_external_prod_all
107106
tests/third_party/cupy/math_tests/test_sumprod.py::TestSumprod::test_external_prod_axis
108107
tests/third_party/cupy/math_tests/test_sumprod.py::TestSumprod::test_external_sum_all
@@ -565,7 +564,6 @@ tests/third_party/cupy/creation_tests/test_from_data.py::TestFromData::test_asar
565564
tests/third_party/cupy/creation_tests/test_from_data.py::TestFromData::test_ascontiguousarray_on_noncontiguous_array
566565
tests/third_party/cupy/creation_tests/test_from_data.py::TestFromData::test_asfortranarray_cuda_array_zero_dim
567566
tests/third_party/cupy/creation_tests/test_from_data.py::TestFromData::test_asfortranarray_cuda_array_zero_dim_dtype
568-
tests/third_party/cupy/creation_tests/test_from_data.py::TestFromData::test_fromfile
569567

570568
tests/third_party/cupy/creation_tests/test_ranges.py::TestMeshgrid_param_0_{copy=False, indexing='xy', sparse=False}::test_meshgrid0
571569
tests/third_party/cupy/creation_tests/test_ranges.py::TestMeshgrid_param_0_{copy=False, indexing='xy', sparse=False}::test_meshgrid1
@@ -969,6 +967,7 @@ tests/third_party/cupy/manipulation_tests/test_tiling.py::TestTile_param_4_{reps
969967
tests/third_party/cupy/manipulation_tests/test_tiling.py::TestTile_param_5_{reps=(2, 3, 4, 5)}::test_array_tile
970968
tests/third_party/cupy/manipulation_tests/test_transpose.py::TestTranspose::test_moveaxis_invalid5_2
971969
tests/third_party/cupy/manipulation_tests/test_transpose.py::TestTranspose::test_moveaxis_invalid5_3
970+
972971
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_param_279_{arg1=array([[1., 2., 3.], [4., 5., 6.]], dtype=float32), arg2=array([[0., 1., 2.], [3., 4., 5.]], dtype=float32), dtype=float64, name='floor_divide', use_dtype=False}::test_binary
973972
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_param_287_{arg1=array([[1., 2., 3.], [4., 5., 6.]], dtype=float32), arg2=array([[0., 1., 2.], [3., 4., 5.]]), dtype=float64, name='floor_divide', use_dtype=False}::test_binary
974973
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_param_295_{arg1=array([[1., 2., 3.], [4., 5., 6.]], dtype=float32), arg2=array([[0, 1, 2], [3, 4, 5]], dtype=int32), dtype=float64, name='floor_divide', use_dtype=False}::test_binary
@@ -985,18 +984,15 @@ tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_para
985984
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_param_527_{arg1=array([[1, 2, 3], [4, 5, 6]]), arg2=array([[0., 1., 2.], [3., 4., 5.]]), dtype=float64, name='floor_divide', use_dtype=False}::test_binary
986985
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_param_535_{arg1=array([[1, 2, 3], [4, 5, 6]]), arg2=array([[0, 1, 2], [3, 4, 5]], dtype=int32), dtype=float64, name='floor_divide', use_dtype=False}::test_binary
987986
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticBinary2_param_543_{arg1=array([[1, 2, 3], [4, 5, 6]]), arg2=array([[0, 1, 2], [3, 4, 5]]), dtype=float64, name='floor_divide', use_dtype=False}::test_binary
988-
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticModf::test_modf
989-
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_0_{name='reciprocal', nargs=1}::test_raises_with_numpy_input
987+
990988
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_10_{name='remainder', nargs=2}::test_raises_with_numpy_input
991989
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_11_{name='mod', nargs=2}::test_raises_with_numpy_input
992990
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_1_{name='angle', nargs=1}::test_raises_with_numpy_input
993991
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_4_{name='divide', nargs=2}::test_raises_with_numpy_input
994992
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_5_{name='power', nargs=2}::test_raises_with_numpy_input
995-
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_6_{name='subtract', nargs=2}::test_raises_with_numpy_input
996993
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_7_{name='true_divide', nargs=2}::test_raises_with_numpy_input
997994
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_8_{name='floor_divide', nargs=2}::test_raises_with_numpy_input
998-
tests/third_party/cupy/math_tests/test_arithmetic.py::TestArithmeticRaisesWithNumpyInput_param_9_{name='fmod', nargs=2}::test_raises_with_numpy_input
999-
tests/third_party/cupy/math_tests/test_arithmetic.py::TestBoolSubtract_param_3_{shape=(), xp=dpnp}::test_bool_subtract
995+
1000996
tests/third_party/cupy/math_tests/test_explog.py::TestExplog::test_logaddexp
1001997
tests/third_party/cupy/math_tests/test_explog.py::TestExplog::test_logaddexp2
1002998
tests/third_party/cupy/math_tests/test_floating.py::TestFloating::test_copysign_float

0 commit comments

Comments
 (0)