From 92979229874996b6aaf6dec1edd75087ff94e1a2 Mon Sep 17 00:00:00 2001 From: Ushnah Abbasi Date: Tue, 4 Aug 2026 17:10:37 +0500 Subject: [PATCH] test: adjust nansum regression coverage --- tests/test_funcs.py | 126 ++++++++++++++++++++++---------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/tests/test_funcs.py b/tests/test_funcs.py index b2de6a44..cf2a3d26 100644 --- a/tests/test_funcs.py +++ b/tests/test_funcs.py @@ -2315,69 +2315,6 @@ def test_xp(self, axis: int | None, expected_list: list[float], xp: ArrayNamespa assert_equal(res, expected) -class TestNanSum: - def test_simple(self, xp: ArrayNamespace): - a = xp.asarray([[1.0, 2.0], [3.0, xp.nan]]) - - res = nansum(a) - expected = 6.0 - assert res == expected - - res = nansum(a, axis=0) - expected = xp.asarray([4.0, 2.0]) - assert_equal(res, expected) - - res = nansum(a, axis=1) - expected = xp.asarray([3.0, 3.0]) - assert_equal(res, expected) - - def test_bigger(self, xp: ArrayNamespace): - a = xp.asarray( - [ - [1.0, xp.nan, 4.0, 5.0], - [xp.nan, -2.0, xp.nan, -4.0], - [2.0, 1.0, 3.0, xp.nan], - ] - ) - - res = nansum(a, axis=0) - expected = xp.asarray([3.0, -1.0, 7.0, 1.0]) - assert_equal(res, expected) - - res = nansum(a, axis=1) - expected = xp.asarray([10.0, -6.0, 6.0]) - assert_equal(res, expected) - - def test_all_nan_slice(self, xp: ArrayNamespace): - a = xp.asarray([[xp.nan, 1.0], [xp.nan, xp.nan]]) - - res = nansum(a, axis=0) - expected = xp.asarray([0.0, 1.0]) - assert_equal(res, expected) - - def test_scalar(self, xp: ArrayNamespace): - a = xp.asarray(1.0) - assert nansum(a) == 1.0 - - @pytest.mark.skip_xp_backend( - Backend.TORCH, reason="torch.nansum does not support tensors on meta device" - ) - @pytest.mark.parametrize("axis", [None, 0, 1]) - def test_device(self, axis: int | None, xp: ArrayNamespace, device: Device): - a = xp.asarray([[4.0, xp.nan, 1.0], [2.0, 5.0, xp.nan]], device=device) - res = nansum(a, axis=axis) - assert get_device(res) == device - - @pytest.mark.parametrize( - ("axis", "expected_list"), [(0, [6.0, 3.0, 1.0]), (1, [5.0, 5.0])] - ) - def test_xp(self, axis: int | None, expected_list: list[float], xp: ArrayNamespace): - a = xp.asarray([[4.0, xp.nan, 1.0], [2.0, 3.0, xp.nan]]) - res = nansum(a, axis=axis, xp=xp) - expected = xp.asarray(expected_list) - assert_equal(res, expected) - - class TestNanMax: def test_simple(self, xp: ArrayNamespace): a = xp.asarray([[5, 3], [6, xp.nan]]) @@ -2457,3 +2394,66 @@ def test_xp(self, axis: int | None, expected_list: list[float], xp: ArrayNamespa res = nanmax(a, axis=axis, xp=xp) expected = xp.asarray(expected_list) assert_equal(res, expected) + + +class TestNanSum: + def test_simple(self, xp: ArrayNamespace): + a = xp.asarray([[1.0, 2.0], [3.0, xp.nan]]) + + res = nansum(a) + expected = 6.0 + assert res == expected + + res = nansum(a, axis=0) + expected = xp.asarray([4.0, 2.0]) + assert_equal(res, expected) + + res = nansum(a, axis=1) + expected = xp.asarray([3.0, 3.0]) + assert_equal(res, expected) + + def test_bigger(self, xp: ArrayNamespace): + a = xp.asarray( + [ + [1.0, xp.nan, 4.0, 5.0], + [xp.nan, -2.0, xp.nan, -4.0], + [2.0, 1.0, 3.0, xp.nan], + ] + ) + + res = nansum(a, axis=0) + expected = xp.asarray([3.0, -1.0, 7.0, 1.0]) + assert_equal(res, expected) + + res = nansum(a, axis=1) + expected = xp.asarray([10.0, -6.0, 6.0]) + assert_equal(res, expected) + + def test_all_nan_slice(self, xp: ArrayNamespace): + a = xp.asarray([[xp.nan, 1.0], [xp.nan, xp.nan]]) + + res = nansum(a, axis=0) + expected = xp.asarray([0.0, 1.0]) + assert_equal(res, expected) + + def test_scalar(self, xp: ArrayNamespace): + a = xp.asarray(1.0) + assert nansum(a) == 1.0 + + @pytest.mark.skip_xp_backend( + Backend.TORCH, reason="torch.nansum does not support tensors on meta device" + ) + @pytest.mark.parametrize("axis", [None, 0, 1]) + def test_device(self, axis: int | None, xp: ArrayNamespace, device: Device): + a = xp.asarray([[4.0, xp.nan, 1.0], [2.0, 5.0, xp.nan]], device=device) + res = nansum(a, axis=axis) + assert get_device(res) == device + + @pytest.mark.parametrize( + ("axis", "expected_list"), [(0, [6.0, 3.0, 1.0]), (1, [5.0, 5.0])] + ) + def test_xp(self, axis: int | None, expected_list: list[float], xp: ArrayNamespace): + a = xp.asarray([[4.0, xp.nan, 1.0], [2.0, 3.0, xp.nan]]) + res = nansum(a, axis=axis, xp=xp) + expected = xp.asarray(expected_list) + assert_equal(res, expected)