html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue
https://github.com/pydata/xarray/pull/7798#issuecomment-1529130077,https://api.github.com/repos/pydata/xarray/issues/7798,1529130077,IC_kwDOAMm_X85bJKxd,6145107,2023-04-30T20:15:24Z,2023-04-30T20:20:21Z,CONTRIBUTOR,"Apologies, that's my bad.  Looks like I introduced a broken test and didn't manually double check the results coming back.   The right shift test should have been:

```    python
    right_expected = Dataset(
        {
            ""x"": (""index"", [0, 0, 2, 2]),
            ""y"": (""index"", [-1, -1, -2, -2]),
            ""level"": (""index"", [0, 0, 4, 4]),
            ""index"": [0, 1, 2, 3],
        }
    )

    right_actual = (left_expected.groupby(""level"") >> shift).reset_coords(names=""level"")
    assert_equal(right_expected, right_actual)
```

I haven't paid attention to this issue, but doing the groupby manually didn't have the bug fwiw.  

<details><summary>Probably overkill test that only fails at the last assert before this fix</summary>
<p>

```python
def test_groupby_math_bitshift() -> None:
    # create new dataset of int's only
    ds = Dataset(
        {
            ""x"": (""index"", np.ones(4, dtype=int)),
            ""y"": (""index"", np.ones(4, dtype=int) * -1),
            ""level"": (""index"", [1, 1, 2, 2]),
            ""index"": [0, 1, 2, 3],
        }
    )
    shift = DataArray([1, 2, 1], [(""level"", [1, 2, 8])])

    left_expected = Dataset(
        {
            ""x"": (""index"", [2, 2, 4, 4]),
            ""y"": (""index"", [-2, -2, -4, -4]),
            ""level"": (""index"", [2, 2, 8, 8]),
            ""index"": [0, 1, 2, 3],
        }
    )

    left_manual = []
    for lev, group in ds.groupby(""level""):
        shifter = shift.sel(level=lev)
        left_manual.append(group << shifter)
    left_actual = xr.concat(left_manual, dim=""index"").reset_coords(names=""level"")
    assert_equal(left_expected, left_actual)

    left_actual = (ds.groupby(""level"") << shift).reset_coords(names=""level"")
    assert_equal(left_expected, left_actual)

    right_expected = Dataset(
        {
            ""x"": (""index"", [0, 0, 2, 2]),
            ""y"": (""index"", [-1, -1, -2, -2]),
            ""level"": (""index"", [0, 0, 4, 4]),
            ""index"": [0, 1, 2, 3],
        }
    )
    right_manual = []
    for lev, group in left_expected.groupby(""level""):
        shifter = shift.sel(level=lev)
        right_manual.append(group >> shifter)
    right_actual = xr.concat(right_manual, dim=""index"").reset_coords(names=""level"")
    assert_equal(right_expected, right_actual)

    right_actual = (left_expected.groupby(""level"") >> shift).reset_coords(names=""level"")
    assert_equal(right_expected, right_actual)
```

</p>
</details> ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1689773381