| 184 | |
| 185 | @pytest.mark.parametrize("ufunc", binary_ufuncs) |
| 186 | def test_binary_ufunc(ufunc): |
| 187 | dafunc = getattr(da, ufunc) |
| 188 | npfunc = getattr(np, ufunc) |
| 189 | |
| 190 | arr1 = np.random.randint(1, 100, size=(20, 20)) |
| 191 | darr1 = da.from_array(arr1, 3) |
| 192 | |
| 193 | arr2 = np.random.randint(1, 100, size=(20, 20)) |
| 194 | darr2 = da.from_array(arr2, 3) |
| 195 | |
| 196 | # applying Dask ufunc doesn't trigger computation |
| 197 | assert isinstance(dafunc(darr1, darr2), da.Array) |
| 198 | assert_eq(dafunc(darr1, darr2), npfunc(arr1, arr2)) |
| 199 | |
| 200 | # applying NumPy ufunc triggers computation or is lazy |
| 201 | assert isinstance(npfunc(darr1, darr2), da.Array) |
| 202 | assert_eq(npfunc(darr1, darr2), npfunc(arr1, arr2)) |
| 203 | |
| 204 | # applying Dask ufunc to normal ndarray triggers computation |
| 205 | assert isinstance(dafunc(arr1, arr2), np.ndarray) |
| 206 | assert_eq(dafunc(arr1, arr2), npfunc(arr1, arr2)) |
| 207 | |
| 208 | # with scalar |
| 209 | assert isinstance(dafunc(darr1, 10), da.Array) |
| 210 | assert_eq(dafunc(darr1, 10), npfunc(arr1, 10)) |
| 211 | |
| 212 | with warnings.catch_warnings(): # overflow in ldexp |
| 213 | warnings.filterwarnings("ignore", category=RuntimeWarning) |
| 214 | assert isinstance(dafunc(10, darr1), da.Array) |
| 215 | assert_eq(dafunc(10, darr1), npfunc(10, arr1)) |
| 216 | |
| 217 | assert isinstance(dafunc(arr1, 10), np.ndarray) |
| 218 | assert_eq(dafunc(arr1, 10), npfunc(arr1, 10)) |
| 219 | |
| 220 | with warnings.catch_warnings(): # overflow in ldexp |
| 221 | warnings.filterwarnings("ignore", category=RuntimeWarning) |
| 222 | assert isinstance(dafunc(10, arr1), np.ndarray) |
| 223 | assert_eq(dafunc(10, arr1), npfunc(10, arr1)) |
| 224 | |
| 225 | |
| 226 | def test_ufunc_outer(): |