| 3836 | |
| 3837 | |
| 3838 | def test_cumulative(): |
| 3839 | rng = np.random.default_rng(0) |
| 3840 | x = da.arange(20, chunks=5) |
| 3841 | assert_eq(x.cumsum(axis=0), np.arange(20).cumsum()) |
| 3842 | assert_eq(x.cumprod(axis=0), np.arange(20).cumprod()) |
| 3843 | |
| 3844 | assert_eq(da.nancumsum(x, axis=0), np.nancumsum(np.arange(20))) |
| 3845 | assert_eq(da.nancumprod(x, axis=0), np.nancumprod(np.arange(20))) |
| 3846 | |
| 3847 | a = rng.random(20) |
| 3848 | a[rng.random(a.shape) < 0.5] = np.nan |
| 3849 | x = da.from_array(a, chunks=5) |
| 3850 | assert_eq(da.nancumsum(x, axis=0), np.nancumsum(a)) |
| 3851 | assert_eq(da.nancumprod(x, axis=0), np.nancumprod(a)) |
| 3852 | |
| 3853 | a = rng.random((20, 24)) |
| 3854 | x = da.from_array(a, chunks=(6, 5)) |
| 3855 | assert_eq(x.cumsum(axis=0), a.cumsum(axis=0)) |
| 3856 | assert_eq(x.cumsum(axis=1), a.cumsum(axis=1)) |
| 3857 | assert_eq(x.cumprod(axis=0), a.cumprod(axis=0)) |
| 3858 | assert_eq(x.cumprod(axis=1), a.cumprod(axis=1)) |
| 3859 | |
| 3860 | assert_eq(da.nancumsum(x, axis=0), np.nancumsum(a, axis=0)) |
| 3861 | assert_eq(da.nancumsum(x, axis=1), np.nancumsum(a, axis=1)) |
| 3862 | assert_eq(da.nancumprod(x, axis=0), np.nancumprod(a, axis=0)) |
| 3863 | assert_eq(da.nancumprod(x, axis=1), np.nancumprod(a, axis=1)) |
| 3864 | |
| 3865 | a = rng.random((20, 24)) |
| 3866 | a[rng.random(a.shape) < 0.5] = np.nan |
| 3867 | x = da.from_array(a, chunks=(6, 5)) |
| 3868 | assert_eq(da.nancumsum(x, axis=0), np.nancumsum(a, axis=0)) |
| 3869 | assert_eq(da.nancumsum(x, axis=1), np.nancumsum(a, axis=1)) |
| 3870 | assert_eq(da.nancumprod(x, axis=0), np.nancumprod(a, axis=0)) |
| 3871 | assert_eq(da.nancumprod(x, axis=1), np.nancumprod(a, axis=1)) |
| 3872 | |
| 3873 | a = rng.random((20, 24, 13)) |
| 3874 | x = da.from_array(a, chunks=(6, 5, 4)) |
| 3875 | for axis in [0, 1, 2, -1, -2, -3]: |
| 3876 | assert_eq(x.cumsum(axis=axis), a.cumsum(axis=axis)) |
| 3877 | assert_eq(x.cumprod(axis=axis), a.cumprod(axis=axis)) |
| 3878 | |
| 3879 | assert_eq(da.nancumsum(x, axis=axis), np.nancumsum(a, axis=axis)) |
| 3880 | assert_eq(da.nancumprod(x, axis=axis), np.nancumprod(a, axis=axis)) |
| 3881 | |
| 3882 | a = rng.random((20, 24, 13)) |
| 3883 | a[rng.random(a.shape) < 0.5] = np.nan |
| 3884 | x = da.from_array(a, chunks=(6, 5, 4)) |
| 3885 | for axis in [0, 1, 2, -1, -2, -3]: |
| 3886 | assert_eq(da.nancumsum(x, axis=axis), np.nancumsum(a, axis=axis)) |
| 3887 | assert_eq(da.nancumprod(x, axis=axis), np.nancumprod(a, axis=axis)) |
| 3888 | |
| 3889 | with pytest.raises(ValueError): |
| 3890 | x.cumsum(axis=3) |
| 3891 | |
| 3892 | with pytest.raises(ValueError): |
| 3893 | x.cumsum(axis=-4) |
| 3894 | |
| 3895 | |