| 225 | |
| 226 | |
| 227 | def test_ufunc_outer(): |
| 228 | arr1 = np.random.randint(1, 100, size=20) |
| 229 | darr1 = da.from_array(arr1, 3) |
| 230 | |
| 231 | arr2 = np.random.randint(1, 100, size=(10, 3)) |
| 232 | darr2 = da.from_array(arr2, 3) |
| 233 | |
| 234 | # Check output types |
| 235 | assert isinstance(da.add.outer(darr1, darr2), da.Array) |
| 236 | assert isinstance(da.add.outer(arr1, darr2), da.Array) |
| 237 | assert isinstance(da.add.outer(darr1, arr2), da.Array) |
| 238 | assert isinstance(da.add.outer(arr1, arr2), np.ndarray) |
| 239 | |
| 240 | # Check mix of dimensions, dtypes, and numpy/dask/object |
| 241 | cases = [ |
| 242 | ((darr1, darr2), (arr1, arr2)), |
| 243 | ((darr2, darr1), (arr2, arr1)), |
| 244 | ((darr2, darr1.astype("f8")), (arr2, arr1.astype("f8"))), |
| 245 | ((darr1, arr2), (arr1, arr2)), |
| 246 | ((darr1, 1), (arr1, 1)), |
| 247 | ((1, darr2), (1, arr2)), |
| 248 | ((1.5, darr2), (1.5, arr2)), |
| 249 | (([1, 2, 3], darr2), ([1, 2, 3], arr2)), |
| 250 | ((darr1.sum(), darr2), (arr1.sum(), arr2)), |
| 251 | ((np.array(1), darr2), (np.array(1), arr2)), |
| 252 | ] |
| 253 | |
| 254 | for (dA, dB), (A, B) in cases: |
| 255 | assert_eq(da.add.outer(dA, dB), np.add.outer(A, B)) |
| 256 | |
| 257 | # Check dtype kwarg works |
| 258 | assert_eq( |
| 259 | da.add.outer(darr1, darr2, dtype="f8"), np.add.outer(arr1, arr2, dtype="f8") |
| 260 | ) |
| 261 | |
| 262 | with pytest.raises(ValueError): |
| 263 | da.add.outer(darr1, darr2, out=arr1) |
| 264 | |
| 265 | with pytest.raises(ValueError): |
| 266 | da.sin.outer(darr1, darr2) |
| 267 | |
| 268 | |
| 269 | @pytest.mark.parametrize("ufunc", ["isreal", "iscomplex", "real", "imag"]) |