|
14 | 14 | # See the License for the specific language governing permissions and |
15 | 15 | # limitations under the License. |
16 | 16 |
|
17 | | -import ctypes |
18 | | - |
19 | 17 | import numpy as np |
20 | 18 | import pytest |
21 | 19 |
|
22 | | -import dpctl |
23 | 20 | import dpctl.tensor as dpt |
24 | 21 | from dpctl.tensor._type_utils import _can_cast |
25 | 22 | from dpctl.tests.helper import get_queue_or_skip, skip_if_dtype_not_supported |
26 | 23 |
|
27 | | -from .utils import ( |
28 | | - _compare_dtypes, |
29 | | - _integral_dtypes, |
30 | | - _no_complex_dtypes, |
31 | | - _usm_types, |
32 | | -) |
| 24 | +from .utils import _compare_dtypes, _integral_dtypes, _no_complex_dtypes |
33 | 25 |
|
34 | 26 |
|
35 | 27 | @pytest.mark.parametrize("op1_dtype", _no_complex_dtypes[1:]) |
@@ -66,134 +58,6 @@ def test_floor_divide_dtype_matrix(op1_dtype, op2_dtype): |
66 | 58 | assert (dpt.asnumpy(r) == expected.astype(r.dtype)).all() |
67 | 59 |
|
68 | 60 |
|
69 | | -@pytest.mark.parametrize("op1_usm_type", _usm_types) |
70 | | -@pytest.mark.parametrize("op2_usm_type", _usm_types) |
71 | | -def test_floor_divide_usm_type_matrix(op1_usm_type, op2_usm_type): |
72 | | - get_queue_or_skip() |
73 | | - |
74 | | - sz = 128 |
75 | | - ar1 = dpt.ones(sz, dtype="i4", usm_type=op1_usm_type) |
76 | | - ar2 = dpt.ones_like(ar1, dtype="i4", usm_type=op2_usm_type) |
77 | | - |
78 | | - r = dpt.floor_divide(ar1, ar2) |
79 | | - assert isinstance(r, dpt.usm_ndarray) |
80 | | - expected_usm_type = dpctl.utils.get_coerced_usm_type( |
81 | | - (op1_usm_type, op2_usm_type) |
82 | | - ) |
83 | | - assert r.usm_type == expected_usm_type |
84 | | - |
85 | | - |
86 | | -def test_floor_divide_order(): |
87 | | - get_queue_or_skip() |
88 | | - |
89 | | - ar1 = dpt.ones((20, 20), dtype="i4", order="C") |
90 | | - ar2 = dpt.ones((20, 20), dtype="i4", order="C") |
91 | | - r1 = dpt.floor_divide(ar1, ar2, order="C") |
92 | | - assert r1.flags.c_contiguous |
93 | | - r2 = dpt.floor_divide(ar1, ar2, order="F") |
94 | | - assert r2.flags.f_contiguous |
95 | | - r3 = dpt.floor_divide(ar1, ar2, order="A") |
96 | | - assert r3.flags.c_contiguous |
97 | | - r4 = dpt.floor_divide(ar1, ar2, order="K") |
98 | | - assert r4.flags.c_contiguous |
99 | | - |
100 | | - ar1 = dpt.ones((20, 20), dtype="i4", order="F") |
101 | | - ar2 = dpt.ones((20, 20), dtype="i4", order="F") |
102 | | - r1 = dpt.floor_divide(ar1, ar2, order="C") |
103 | | - assert r1.flags.c_contiguous |
104 | | - r2 = dpt.floor_divide(ar1, ar2, order="F") |
105 | | - assert r2.flags.f_contiguous |
106 | | - r3 = dpt.floor_divide(ar1, ar2, order="A") |
107 | | - assert r3.flags.f_contiguous |
108 | | - r4 = dpt.floor_divide(ar1, ar2, order="K") |
109 | | - assert r4.flags.f_contiguous |
110 | | - |
111 | | - ar1 = dpt.ones((40, 40), dtype="i4", order="C")[:20, ::-2] |
112 | | - ar2 = dpt.ones((40, 40), dtype="i4", order="C")[:20, ::-2] |
113 | | - r4 = dpt.floor_divide(ar1, ar2, order="K") |
114 | | - assert r4.strides == (20, -1) |
115 | | - |
116 | | - ar1 = dpt.ones((40, 40), dtype="i4", order="C")[:20, ::-2].mT |
117 | | - ar2 = dpt.ones((40, 40), dtype="i4", order="C")[:20, ::-2].mT |
118 | | - r4 = dpt.floor_divide(ar1, ar2, order="K") |
119 | | - assert r4.strides == (-1, 20) |
120 | | - |
121 | | - |
122 | | -def test_floor_divide_broadcasting(): |
123 | | - get_queue_or_skip() |
124 | | - |
125 | | - m = dpt.ones((100, 5), dtype="i4") |
126 | | - v = dpt.arange(1, 6, dtype="i4") |
127 | | - |
128 | | - r = dpt.floor_divide(m, v) |
129 | | - |
130 | | - expected = np.floor_divide( |
131 | | - np.ones((100, 5), dtype="i4"), np.arange(1, 6, dtype="i4") |
132 | | - ) |
133 | | - assert (dpt.asnumpy(r) == expected.astype(r.dtype)).all() |
134 | | - |
135 | | - r2 = dpt.floor_divide(v, m) |
136 | | - expected2 = np.floor_divide( |
137 | | - np.arange(1, 6, dtype="i4"), np.ones((100, 5), dtype="i4") |
138 | | - ) |
139 | | - assert (dpt.asnumpy(r2) == expected2.astype(r2.dtype)).all() |
140 | | - |
141 | | - |
142 | | -@pytest.mark.parametrize("arr_dt", _no_complex_dtypes[1:]) |
143 | | -def test_floor_divide_python_scalar(arr_dt): |
144 | | - q = get_queue_or_skip() |
145 | | - skip_if_dtype_not_supported(arr_dt, q) |
146 | | - |
147 | | - X = dpt.ones((10, 10), dtype=arr_dt, sycl_queue=q) |
148 | | - py_ones = ( |
149 | | - bool(1), |
150 | | - int(1), |
151 | | - float(1), |
152 | | - np.float32(1), |
153 | | - ctypes.c_int(1), |
154 | | - ) |
155 | | - for sc in py_ones: |
156 | | - R = dpt.floor_divide(X, sc) |
157 | | - assert isinstance(R, dpt.usm_ndarray) |
158 | | - R = dpt.floor_divide(sc, X) |
159 | | - assert isinstance(R, dpt.usm_ndarray) |
160 | | - |
161 | | - |
162 | | -class MockArray: |
163 | | - def __init__(self, arr): |
164 | | - self.data_ = arr |
165 | | - |
166 | | - @property |
167 | | - def __sycl_usm_array_interface__(self): |
168 | | - return self.data_.__sycl_usm_array_interface__ |
169 | | - |
170 | | - |
171 | | -def test_floor_divide_mock_array(): |
172 | | - get_queue_or_skip() |
173 | | - a = dpt.arange(10) |
174 | | - b = dpt.ones(10) |
175 | | - c = MockArray(b) |
176 | | - r = dpt.floor_divide(a, c) |
177 | | - assert isinstance(r, dpt.usm_ndarray) |
178 | | - |
179 | | - |
180 | | -def test_floor_divide_canary_mock_array(): |
181 | | - get_queue_or_skip() |
182 | | - a = dpt.arange(10) |
183 | | - |
184 | | - class Canary: |
185 | | - def __init__(self): |
186 | | - pass |
187 | | - |
188 | | - @property |
189 | | - def __sycl_usm_array_interface__(self): |
190 | | - return None |
191 | | - |
192 | | - c = Canary() |
193 | | - with pytest.raises(ValueError): |
194 | | - dpt.floor_divide(a, c) |
195 | | - |
196 | | - |
197 | 61 | def test_floor_divide_gh_1247(): |
198 | 62 | get_queue_or_skip() |
199 | 63 |
|
@@ -263,18 +127,6 @@ def test_floor_divide_special_cases(): |
263 | 127 | np.testing.assert_array_equal(dpt.asnumpy(res), res_np) |
264 | 128 |
|
265 | 129 |
|
266 | | -@pytest.mark.parametrize("dtype", _no_complex_dtypes[1:]) |
267 | | -def test_divide_inplace_python_scalar(dtype): |
268 | | - q = get_queue_or_skip() |
269 | | - skip_if_dtype_not_supported(dtype, q) |
270 | | - X = dpt.zeros((10, 10), dtype=dtype, sycl_queue=q) |
271 | | - dt_kind = X.dtype.kind |
272 | | - if dt_kind in "ui": |
273 | | - X //= int(1) |
274 | | - elif dt_kind == "f": |
275 | | - X //= float(1) |
276 | | - |
277 | | - |
278 | 130 | @pytest.mark.parametrize("op1_dtype", _no_complex_dtypes[1:]) |
279 | 131 | @pytest.mark.parametrize("op2_dtype", _no_complex_dtypes[1:]) |
280 | 132 | def test_floor_divide_inplace_dtype_matrix(op1_dtype, op2_dtype): |
|
0 commit comments