| 171 | |
| 172 | @pytest.mark.parametrize("ufunc", binary_ufuncs) |
| 173 | def test_binary_ufunc(ufunc): |
| 174 | dafunc = getattr(da, ufunc) |
| 175 | npfunc = getattr(np, ufunc) |
| 176 | |
| 177 | arr1 = np.random.randint(1, 100, size=(20, 20)) |
| 178 | darr1 = da.from_array(arr1, 3) |
| 179 | |
| 180 | arr2 = np.random.randint(1, 100, size=(20, 20)) |
| 181 | darr2 = da.from_array(arr2, 3) |
| 182 | |
| 183 | # applying Dask ufunc doesn't trigger computation |
| 184 | assert isinstance(dafunc(darr1, darr2), da.Array) |
| 185 | assert_eq(dafunc(darr1, darr2), npfunc(arr1, arr2)) |
| 186 | |
| 187 | # applying NumPy ufunc triggers computation or is lazy |
| 188 | assert isinstance(npfunc(darr1, darr2), da.Array) |
| 189 | assert_eq(npfunc(darr1, darr2), npfunc(arr1, arr2)) |
| 190 | |
| 191 | # applying Dask ufunc to normal ndarray triggers computation |
| 192 | assert isinstance(dafunc(arr1, arr2), np.ndarray) |
| 193 | assert_eq(dafunc(arr1, arr2), npfunc(arr1, arr2)) |
| 194 | |
| 195 | # with scalar |
| 196 | assert isinstance(dafunc(darr1, 10), da.Array) |
| 197 | assert_eq(dafunc(darr1, 10), npfunc(arr1, 10)) |
| 198 | |
| 199 | with warnings.catch_warnings(): # overflow in ldexp |
| 200 | warnings.filterwarnings("ignore", category=RuntimeWarning) |
| 201 | assert isinstance(dafunc(10, darr1), da.Array) |
| 202 | assert_eq(dafunc(10, darr1), npfunc(10, arr1)) |
| 203 | |
| 204 | assert isinstance(dafunc(arr1, 10), np.ndarray) |
| 205 | assert_eq(dafunc(arr1, 10), npfunc(arr1, 10)) |
| 206 | |
| 207 | with warnings.catch_warnings(): # overflow in ldexp |
| 208 | warnings.filterwarnings("ignore", category=RuntimeWarning) |
| 209 | assert isinstance(dafunc(10, arr1), np.ndarray) |
| 210 | assert_eq(dafunc(10, arr1), npfunc(10, arr1)) |
| 211 | |
| 212 | |
| 213 | def test_ufunc_outer(): |