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