(ts1, ts2)
| 1639 | else: |
| 1640 | |
| 1641 | def np_cov(ts1, ts2): |
| 1642 | # Ensure the ts are aligned and missing values ignored |
| 1643 | ts1, ts2 = broadcast(ts1, ts2) |
| 1644 | valid_values = ts1.notnull() & ts2.notnull() |
| 1645 | |
| 1646 | ts1 = ts1.where(valid_values) |
| 1647 | ts2 = ts2.where(valid_values) |
| 1648 | |
| 1649 | return np.ma.cov( |
| 1650 | np.ma.masked_invalid(ts1.data.flatten()), |
| 1651 | np.ma.masked_invalid(ts2.data.flatten()), |
| 1652 | ddof=ddof, |
| 1653 | )[0, 1] |
| 1654 | |
| 1655 | expected = np_cov(da_a, da_b) |
| 1656 | actual = xr.cov(da_a, da_b, dim=dim, ddof=ddof) |