From 8a0bcb5d5e687c35e18196c0fe1dfa4c62e58740 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 10:42:19 -0600 Subject: [PATCH 1/2] docs: add nj-vs-vh as a contributor for code (#3293) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 1 + 2 files changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 4f6f90c52b..9d4caf4356 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -501,6 +501,15 @@ "contributions": [ "maintenance" ] + }, + { + "login": "nj-vs-vh", + "name": "Igor Vaiman", + "avatar_url": "https://avatars.githubusercontent.com/u/30616208?v=4", + "profile": "https://nj-vs-vh.name/", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index e4ec709a8d..7cc935cc3e 100644 --- a/README.md +++ b/README.md @@ -232,6 +232,7 @@ Thanks especially to the gracious help of Awkward Array contributors (including maxymnaumchyk
maxymnaumchyk

💻 Thomas A Caswell
Thomas A Caswell

🚧 Bas Nijholt
Bas Nijholt

🚧 + Igor Vaiman
Igor Vaiman

💻 From 5145bcee480ba748e22fc198ec5971db7c5800be Mon Sep 17 00:00:00 2001 From: Igor Vaiman Date: Wed, 6 Nov 2024 17:42:27 +0100 Subject: [PATCH 2/2] fix: correct handling of keepdims and mask_identity for weighted mean (#3291) * fix + tests * style: pre-commit fixes --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- src/awkward/operations/ak_mean.py | 4 +- tests/test_3285_ak_mean_weighted_row_wise.py | 65 ++++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 tests/test_3285_ak_mean_weighted_row_wise.py diff --git a/src/awkward/operations/ak_mean.py b/src/awkward/operations/ak_mean.py index a9b38ce1f0..3b6552c521 100644 --- a/src/awkward/operations/ak_mean.py +++ b/src/awkward/operations/ak_mean.py @@ -225,8 +225,8 @@ def _impl(x, weight, axis, keepdims, mask_identity, highlevel, behavior, attrs): sumw = ak.operations.ak_sum._impl( x * 0 + weight, axis, - keepdims, - mask_identity, + keepdims=True, + mask_identity=True, highlevel=True, behavior=ctx.behavior, attrs=ctx.attrs, diff --git a/tests/test_3285_ak_mean_weighted_row_wise.py b/tests/test_3285_ak_mean_weighted_row_wise.py new file mode 100644 index 0000000000..2c1bc1db9b --- /dev/null +++ b/tests/test_3285_ak_mean_weighted_row_wise.py @@ -0,0 +1,65 @@ +# BSD 3-Clause License; see https://github.com/scikit-hep/awkward/blob/main/LICENSE + +from __future__ import annotations + +import math + +import pytest + +import awkward as ak + + +@pytest.mark.parametrize( + "keepdims, expected_result", + [ + pytest.param(False, ak.Array([2.25, 6.5])), + pytest.param(True, ak.Array([[2.25], [6.5]])), + ], +) +def test_keepdims(keepdims: bool, expected_result: ak.Array): + data = ak.Array( + [ + [1, 2, 3], + [4, 7], + ] + ) + weight = ak.Array( + [ + [1, 1, 2], + [1, 5], + ] + ) + assert ak.all( + ak.mean(data, weight=weight, axis=1, keepdims=keepdims) == expected_result + ) + + +@pytest.mark.parametrize( + "mask_identity, expected_result", + [ + pytest.param(False, ak.Array([1.5, math.nan, 8])), + pytest.param(True, ak.Array([1.5, None, 8])), + ], +) +def test_mask_identity(mask_identity: bool, expected_result: ak.Array): + data = ak.Array( + [ + [1, 2], + [], + [6, 9], + ] + ) + weight = ak.Array( + [ + [1, 1], + [], + [1, 2], + ] + ) + result = ak.mean(data, weight=weight, axis=1, mask_identity=mask_identity) + assert result[0] == expected_result[0] + if mask_identity: + assert result[1] is None + else: + assert math.isnan(result[1]) # NaN is not equal to itself per IEEE! + assert result[2] == expected_result[2]