Skip to content

Commit 17d7921

Browse files
authored
Reworked dpnp.copyto() implementation through existing calls (#1516)
* Reworked dpnp.copyto() implementation through existing calls * Extended public CI scope with two more files * Unmuted tests around dpnp.copyto() * Fixed typos in description * Left part of dpnp_copyto implementations in backend since used by FFT * Removed leftover in cython for DPNP_FN_COPYTO * Removed unnecessary import * Applied review comments * Mute not working tests * Mute tests for dpnp.power() which are failing in CI
1 parent 0dc03bb commit 17d7921

File tree

15 files changed

+673
-412
lines changed

15 files changed

+673
-412
lines changed

.github/workflows/conda-package.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ env:
1818
test_fft.py
1919
test_linalg.py
2020
test_logic.py
21+
test_manipulation.py
2122
test_mathematical.py
2223
test_random_state.py
2324
test_sort.py
@@ -26,6 +27,7 @@ env:
2627
test_usm_type.py
2728
third_party/cupy/linalg_tests/test_product.py
2829
third_party/cupy/logic_tests/test_truth.py
30+
third_party/cupy/manipulation_tests/test_basic.py
2931
third_party/cupy/manipulation_tests/test_join.py
3032
third_party/cupy/math_tests/test_explog.py
3133
third_party/cupy/math_tests/test_misc.py

dpnp/backend/kernels/dpnp_krnl_elemwise.cpp

Lines changed: 10 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -414,59 +414,26 @@ static void func_map_init_elemwise_1arg_2type(func_map_t &fmap)
414414
(void *)
415415
dpnp_copyto_c_default<std::complex<double>, std::complex<double>>};
416416

417-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_BLN][eft_BLN] = {
418-
eft_BLN, (void *)dpnp_copyto_c_ext<bool, bool>};
419-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_BLN][eft_INT] = {
420-
eft_INT, (void *)dpnp_copyto_c_ext<bool, int32_t>};
421-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_BLN][eft_LNG] = {
422-
eft_LNG, (void *)dpnp_copyto_c_ext<bool, int64_t>};
423-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_BLN][eft_FLT] = {
424-
eft_FLT, (void *)dpnp_copyto_c_ext<bool, float>};
417+
// dpnp_copyto_c is required by dpnp_fft_fft_c and dpnp_fft_rfft_c
425418
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_BLN][eft_DBL] = {
426419
eft_DBL, (void *)dpnp_copyto_c_ext<bool, double>};
427-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_INT][eft_BLN] = {
428-
eft_BLN, (void *)dpnp_copyto_c_ext<int32_t, bool>};
429-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_INT][eft_INT] = {
430-
eft_INT, (void *)dpnp_copyto_c_ext<int32_t, int32_t>};
431-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_INT][eft_LNG] = {
432-
eft_LNG, (void *)dpnp_copyto_c_ext<int32_t, int64_t>};
433-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_INT][eft_FLT] = {
434-
eft_FLT, (void *)dpnp_copyto_c_ext<int32_t, float>};
435420
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_INT][eft_DBL] = {
436421
eft_DBL, (void *)dpnp_copyto_c_ext<int32_t, double>};
437-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_LNG][eft_BLN] = {
438-
eft_BLN, (void *)dpnp_copyto_c_ext<int64_t, bool>};
439-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_LNG][eft_INT] = {
440-
eft_INT, (void *)dpnp_copyto_c_ext<int64_t, int32_t>};
441-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_LNG][eft_LNG] = {
442-
eft_LNG, (void *)dpnp_copyto_c_ext<int64_t, int64_t>};
443-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_LNG][eft_FLT] = {
444-
eft_FLT, (void *)dpnp_copyto_c_ext<int64_t, float>};
445422
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_LNG][eft_DBL] = {
446423
eft_DBL, (void *)dpnp_copyto_c_ext<int64_t, double>};
447-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_FLT][eft_BLN] = {
448-
eft_BLN, (void *)dpnp_copyto_c_ext<float, bool>};
449-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_FLT][eft_INT] = {
450-
eft_INT, (void *)dpnp_copyto_c_ext<float, int32_t>};
451-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_FLT][eft_LNG] = {
452-
eft_LNG, (void *)dpnp_copyto_c_ext<float, int64_t>};
453-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_FLT][eft_FLT] = {
454-
eft_FLT, (void *)dpnp_copyto_c_ext<float, float>};
455424
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_FLT][eft_DBL] = {
456425
eft_DBL, (void *)dpnp_copyto_c_ext<float, double>};
457-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_DBL][eft_BLN] = {
458-
eft_BLN, (void *)dpnp_copyto_c_ext<double, bool>};
459-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_DBL][eft_INT] = {
460-
eft_INT, (void *)dpnp_copyto_c_ext<double, int32_t>};
461-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_DBL][eft_LNG] = {
462-
eft_LNG, (void *)dpnp_copyto_c_ext<double, int64_t>};
463-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_DBL][eft_FLT] = {
464-
eft_FLT, (void *)dpnp_copyto_c_ext<double, float>};
465426
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_DBL][eft_DBL] = {
466427
eft_DBL, (void *)dpnp_copyto_c_ext<double, double>};
467-
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_C128][eft_C128] = {
468-
eft_C128,
469-
(void *)dpnp_copyto_c_ext<std::complex<double>, std::complex<double>>};
428+
429+
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_BLN][eft_FLT] = {
430+
eft_FLT, (void *)dpnp_copyto_c_ext<bool, float>};
431+
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_INT][eft_FLT] = {
432+
eft_FLT, (void *)dpnp_copyto_c_ext<int32_t, float>};
433+
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_LNG][eft_FLT] = {
434+
eft_FLT, (void *)dpnp_copyto_c_ext<int64_t, float>};
435+
fmap[DPNPFuncName::DPNP_FN_COPYTO_EXT][eft_FLT][eft_FLT] = {
436+
eft_FLT, (void *)dpnp_copyto_c_ext<float, float>};
470437

471438
fmap[DPNPFuncName::DPNP_FN_COS][eft_INT][eft_INT] = {
472439
eft_DBL, (void *)dpnp_cos_c_default<int32_t, double>};

dpnp/dpnp_algo/dpnp_algo.pxd

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,6 @@ cdef extern from "dpnp_iface_fptr.hpp" namespace "DPNPFuncName": # need this na
7272
DPNP_FN_COPY_EXT
7373
DPNP_FN_COPYSIGN
7474
DPNP_FN_COPYSIGN_EXT
75-
DPNP_FN_COPYTO
76-
DPNP_FN_COPYTO_EXT
7775
DPNP_FN_CORRELATE
7876
DPNP_FN_CORRELATE_EXT
7977
DPNP_FN_COSH

dpnp/dpnp_algo/dpnp_algo_manipulation.pxi

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ and the rest of the library
3838
__all__ += [
3939
"dpnp_atleast_2d",
4040
"dpnp_atleast_3d",
41-
"dpnp_copyto",
4241
"dpnp_expand_dims",
4342
"dpnp_repeat",
4443
"dpnp_reshape",
@@ -105,45 +104,6 @@ cpdef utils.dpnp_descriptor dpnp_atleast_3d(utils.dpnp_descriptor arr):
105104
return arr
106105

107106

108-
cpdef dpnp_copyto(utils.dpnp_descriptor dst, utils.dpnp_descriptor src, where=True):
109-
# Convert string type names (array.dtype) to C enum DPNPFuncType
110-
cdef DPNPFuncType dst_type = dpnp_dtype_to_DPNPFuncType(dst.dtype)
111-
cdef DPNPFuncType src_type = dpnp_dtype_to_DPNPFuncType(src.dtype)
112-
113-
cdef shape_type_c dst_shape = dst.shape
114-
cdef shape_type_c dst_strides = utils.strides_to_vector(dst.strides, dst_shape)
115-
116-
cdef shape_type_c src_shape = src.shape
117-
cdef shape_type_c src_strides = utils.strides_to_vector(src.strides, src_shape)
118-
119-
# get the FPTR data structure
120-
cdef DPNPFuncData kernel_data = get_dpnp_function_ptr(DPNP_FN_COPYTO_EXT, src_type, dst_type)
121-
122-
_, _, result_sycl_queue = utils.get_common_usm_allocation(dst, src)
123-
124-
cdef c_dpctl.SyclQueue q = <c_dpctl.SyclQueue> result_sycl_queue
125-
cdef c_dpctl.DPCTLSyclQueueRef q_ref = q.get_queue_ref()
126-
127-
# Call FPTR function
128-
cdef fptr_1in_1out_strides_t func = <fptr_1in_1out_strides_t > kernel_data.ptr
129-
cdef c_dpctl.DPCTLSyclEventRef event_ref = func(q_ref,
130-
dst.get_data(),
131-
dst.size,
132-
dst.ndim,
133-
dst_shape.data(),
134-
dst_strides.data(),
135-
src.get_data(),
136-
src.size,
137-
src.ndim,
138-
src_shape.data(),
139-
src_strides.data(),
140-
NULL,
141-
NULL) # dep_events_ref
142-
143-
with nogil: c_dpctl.DPCTLEvent_WaitAndThrow(event_ref)
144-
c_dpctl.DPCTLEvent_Delete(event_ref)
145-
146-
147107
cpdef utils.dpnp_descriptor dpnp_expand_dims(utils.dpnp_descriptor in_array, axis):
148108
axis_tuple = utils._object_to_tuple(axis)
149109
result_ndim = len(axis_tuple) + in_array.ndim

dpnp/dpnp_iface_manipulation.py

Lines changed: 66 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ def concatenate(arrays, /, *, axis=0, out=None, dtype=None, **kwargs):
251251
Limitations
252252
-----------
253253
Each array in `arrays` is supported as either :class:`dpnp.ndarray`
254-
or :class:`dpctl.tensor.usm_ndarray`. Otherwise ``TypeError`` exeption
254+
or :class:`dpctl.tensor.usm_ndarray`. Otherwise ``TypeError`` exception
255255
will be raised.
256256
Parameters `out` and `dtype are supported with default value.
257257
Keyword argument ``kwargs`` is currently unsupported.
@@ -313,64 +313,79 @@ def copyto(dst, src, casting="same_kind", where=True):
313313
"""
314314
Copies values from one array to another, broadcasting as necessary.
315315

316+
Raises a ``TypeError`` if the `casting` rule is violated, and if
317+
`where` is provided, it selects which elements to copy.
318+
316319
For full documentation refer to :obj:`numpy.copyto`.
317320

318321
Limitations
319322
-----------
320-
Input arrays are supported as :obj:`dpnp.ndarray`.
321-
Otherwise the function will be executed sequentially on CPU.
322-
Parameter ``casting`` is supported only with default value ``"same_kind"``.
323-
Parameter ``where`` is supported only with default value ``True``.
324-
Shapes of input arrays are supported to be equal.
323+
The `dst` parameter is supported as either :class:`dpnp.ndarray`
324+
or :class:`dpctl.tensor.usm_ndarray`.
325+
The `where` parameter is supported as either :class:`dpnp.ndarray`,
326+
:class:`dpctl.tensor.usm_ndarray` or scalar.
327+
Otherwise ``TypeError`` exception will be raised.
325328
Input array data types are limited by supported DPNP :ref:`Data types`.
326329

330+
Examples
331+
--------
332+
>>> import dpnp as np
333+
>>> A = np.array([4, 5, 6])
334+
>>> B = [1, 2, 3]
335+
>>> np.copyto(A, B)
336+
>>> A
337+
array([1, 2, 3])
338+
339+
>>> A = np.array([[1, 2, 3], [4, 5, 6]])
340+
>>> B = [[4, 5, 6], [7, 8, 9]]
341+
>>> np.copyto(A, B)
342+
>>> A
343+
array([[4, 5, 6],
344+
[7, 8, 9]])
345+
327346
"""
328347

329-
dst_desc = dpnp.get_dpnp_descriptor(
330-
dst, copy_when_strides=False, copy_when_nondefault_queue=False
331-
)
332-
src_desc = dpnp.get_dpnp_descriptor(src, copy_when_nondefault_queue=False)
333-
if dst_desc and src_desc:
334-
if casting != "same_kind":
335-
pass
336-
elif (
337-
dst_desc.dtype == dpnp.bool
338-
and src_desc.dtype # due to 'same_kind' casting
339-
in [
340-
dpnp.int32,
341-
dpnp.int64,
342-
dpnp.float32,
343-
dpnp.float64,
344-
dpnp.complex128,
345-
]
346-
):
347-
pass
348-
elif dst_desc.dtype in [
349-
dpnp.int32,
350-
dpnp.int64,
351-
] and src_desc.dtype in [ # due to 'same_kind' casting
352-
dpnp.float32,
353-
dpnp.float64,
354-
dpnp.complex128,
355-
]:
356-
pass
357-
elif (
358-
dst_desc.dtype in [dpnp.float32, dpnp.float64]
359-
and src_desc.dtype == dpnp.complex128
360-
): # due to 'same_kind' casting
361-
pass
362-
elif where is not True:
363-
pass
364-
elif dst_desc.shape != src_desc.shape:
365-
pass
366-
elif dst_desc.strides != src_desc.strides:
367-
pass
368-
else:
369-
return dpnp_copyto(dst_desc, src_desc, where=where)
348+
if not dpnp.is_supported_array_type(dst):
349+
raise TypeError(
350+
"Destination array must be any of supported type, "
351+
f"but got {type(dst)}"
352+
)
353+
elif not dpnp.is_supported_array_type(src):
354+
src = dpnp.array(src, sycl_queue=dst.sycl_queue)
370355

371-
return call_origin(
372-
numpy.copyto, dst, src, casting, where, dpnp_inplace=True
373-
)
356+
if not dpt.can_cast(src.dtype, dst.dtype, casting=casting):
357+
raise TypeError(
358+
f"Cannot cast from {src.dtype} to {dst.dtype} "
359+
f"according to the rule {casting}."
360+
)
361+
362+
if where is True:
363+
dst[...] = src
364+
elif where is False:
365+
# nothing to copy
366+
pass
367+
else:
368+
if dpnp.isscalar(where):
369+
where = dpnp.array(
370+
where, dtype=dpnp.bool, sycl_queue=dst.sycl_queue
371+
)
372+
elif not dpnp.is_supported_array_type(where):
373+
raise TypeError(
374+
"`where` array must be any of supported type, "
375+
f"but got {type(where)}"
376+
)
377+
elif where.dtype != dpnp.bool:
378+
raise TypeError(
379+
"`where` keyword argument must be of boolean type, "
380+
f"but got {where.dtype}"
381+
)
382+
383+
dst_usm, src_usm, mask_usm = dpt.broadcast_arrays(
384+
dpnp.get_usm_ndarray(dst),
385+
dpnp.get_usm_ndarray(src),
386+
dpnp.get_usm_ndarray(where),
387+
)
388+
dst_usm[mask_usm] = src_usm[mask_usm]
374389

375390

376391
def expand_dims(x1, axis):
@@ -847,7 +862,7 @@ def stack(arrays, /, *, axis=0, out=None, dtype=None, **kwargs):
847862
Limitations
848863
-----------
849864
Each array in `arrays` is supported as either :class:`dpnp.ndarray`
850-
or :class:`dpctl.tensor.usm_ndarray`. Otherwise ``TypeError`` exeption
865+
or :class:`dpctl.tensor.usm_ndarray`. Otherwise ``TypeError`` exception
851866
will be raised.
852867
Parameters `out` and `dtype are supported with default value.
853868
Keyword argument ``kwargs`` is currently unsupported.

tests/__init__.py

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,7 @@
11
import numpy
22

3-
import dpnp
43
from tests import testing
5-
from tests.third_party.cupy import testing as cupy_testing
6-
7-
from .helper import has_support_aspect64
84

95
numpy.testing.assert_allclose = testing.assert_allclose
106
numpy.testing.assert_array_equal = testing.assert_array_equal
117
numpy.testing.assert_equal = testing.assert_equal
12-
13-
# patch for shaped_arange func to exclude calls of astype and reshape
14-
# necessary because new data container does not support these functions yet
15-
16-
orig_shaped_arange = cupy_testing.shaped_arange
17-
orig_shaped_reverse_arange = cupy_testing.shaped_reverse_arange
18-
19-
20-
def _shaped_arange(shape, xp=dpnp, dtype=dpnp.float64, order="C"):
21-
if dtype is dpnp.float64:
22-
dtype = dpnp.float32 if not has_support_aspect64() else dtype
23-
res = xp.array(
24-
orig_shaped_arange(shape, xp=numpy, dtype=dtype, order=order),
25-
dtype=dtype,
26-
)
27-
return res
28-
29-
30-
def _shaped_reverse_arange(shape, xp=dpnp, dtype=dpnp.float32):
31-
res = xp.array(
32-
orig_shaped_reverse_arange(shape, xp=numpy, dtype=dtype), dtype=dtype
33-
)
34-
return res
35-
36-
37-
cupy_testing.shaped_arange = _shaped_arange
38-
cupy_testing.shaped_reverse_arange = _shaped_reverse_arange

tests/skipped_tests.tbl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,8 @@ tests/third_party/cupy/creation_tests/test_basic.py::TestBasic::test_ones_like_s
265265
tests/third_party/cupy/creation_tests/test_basic.py::TestBasic::test_zeros_like_subok
266266
tests/third_party/cupy/creation_tests/test_basic.py::TestBasic::test_zeros_strides
267267

268+
tests/third_party/cupy/creation_tests/test_from_data.py::TestFromData::test_copy_order
269+
268270
tests/third_party/cupy/creation_tests/test_matrix.py::TestMatrix::test_diag_construction_from_list
269271
tests/third_party/cupy/creation_tests/test_matrix.py::TestMatrix::test_diag_construction_from_tuple
270272
tests/third_party/cupy/creation_tests/test_matrix.py::TestMatrix::test_diag_extraction_from_nested_list

tests/skipped_tests_gpu.tbl

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -212,34 +212,6 @@ tests/third_party/cupy/linalg_tests/test_einsum.py::TestListArgEinSumError::test
212212
tests/third_party/cupy/linalg_tests/test_einsum.py::TestListArgEinSumError::test_too_many_dims3
213213

214214
tests/third_party/cupy/linalg_tests/test_product.py::TestProduct::test_reversed_vdot
215-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_7_{dst_shape=(0,), src=3.2}::test_copyto_where
216-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_8_{dst_shape=(0,), src=0}::test_copyto_where
217-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_9_{dst_shape=(0,), src=4}::test_copyto_where
218-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_10_{dst_shape=(0,), src=-4}::test_copyto_where
219-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_11_{dst_shape=(0,), src=True}::test_copyto_where
220-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_12_{dst_shape=(0,), src=False}::test_copyto_where
221-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_13_{dst_shape=(0,), src=(1+1j)}::test_copyto_where
222-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_14_{dst_shape=(1,), src=3.2}::test_copyto_where
223-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_15_{dst_shape=(1,), src=0}::test_copyto_where
224-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_16_{dst_shape=(1,), src=4}::test_copyto_where
225-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_17_{dst_shape=(1,), src=-4}::test_copyto_where
226-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_18_{dst_shape=(1,), src=True}::test_copyto_where
227-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_19_{dst_shape=(1,), src=False}::test_copyto_where
228-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_20_{dst_shape=(1,), src=(1+1j)}::test_copyto_where
229-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_21_{dst_shape=(1, 1), src=3.2}::test_copyto_where
230-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_22_{dst_shape=(1, 1), src=0}::test_copyto_where
231-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_23_{dst_shape=(1, 1), src=4}::test_copyto_where
232-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_24_{dst_shape=(1, 1), src=-4}::test_copyto_where
233-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_25_{dst_shape=(1, 1), src=True}::test_copyto_where
234-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_26_{dst_shape=(1, 1), src=False}::test_copyto_where
235-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_27_{dst_shape=(1, 1), src=(1+1j)}::test_copyto_where
236-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_28_{dst_shape=(2, 2), src=3.2}::test_copyto_where
237-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_29_{dst_shape=(2, 2), src=0}::test_copyto_where
238-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_30_{dst_shape=(2, 2), src=4}::test_copyto_where
239-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_31_{dst_shape=(2, 2), src=-4}::test_copyto_where
240-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_32_{dst_shape=(2, 2), src=True}::test_copyto_where
241-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_33_{dst_shape=(2, 2), src=False}::test_copyto_where
242-
tests/third_party/cupy/manipulation_tests/test_basic.py::TestCopytoFromScalar_param_34_{dst_shape=(2, 2), src=(1+1j)}::test_copyto_where
243215

244216
tests/third_party/cupy/math_tests/test_sumprod.py::TestCumprod::test_cumprod_out_noncontiguous
245217
tests/third_party/cupy/math_tests/test_sumprod.py::TestCumsum_param_0_{axis=0}::test_cumsum_axis_out_noncontiguous
@@ -459,6 +431,9 @@ tests/third_party/cupy/creation_tests/test_ranges.py::TestRanges::test_linspace_
459431
tests/third_party/cupy/creation_tests/test_ranges.py::TestRanges::test_linspace_with_retstep
460432
tests/third_party/cupy/creation_tests/test_ranges.py::TestRanges::test_linspace_zero_num_no_endopoint_with_retstep
461433
tests/third_party/cupy/creation_tests/test_ranges.py::TestRanges::test_logspace_zero_num
434+
435+
tests/third_party/cupy/creation_tests/test_from_data.py::TestFromData::test_copy_order
436+
462437
tests/third_party/cupy/fft_tests/test_fft.py::TestFft2_param_1_{axes=None, norm=None, s=(1, None), shape=(3, 4)}::test_fft2
463438
tests/third_party/cupy/fft_tests/test_fft.py::TestFft2_param_7_{axes=(), norm=None, s=None, shape=(3, 4)}::test_fft2
464439
tests/third_party/cupy/fft_tests/test_fft.py::TestFft2_param_7_{axes=(), norm=None, s=None, shape=(3, 4)}::test_ifft2

0 commit comments

Comments
 (0)