id,node_id,number,title,user,state,locked,assignee,milestone,comments,created_at,updated_at,closed_at,author_association,active_lock_reason,draft,pull_request,body,reactions,performed_via_github_app,state_reason,repo,type 1656363348,I_kwDOAMm_X85iuhlU,7727,Implement lshift and rshift operators,6145107,closed,0,,,1,2023-04-05T22:07:15Z,2023-04-28T14:22:08Z,2023-04-28T14:22:08Z,CONTRIBUTOR,,,,"### Is your feature request related to a problem? I've noticed that xarray does not support the lshift or rshift operators. While this is workable by using the numpy array the addition of the operators also seem somewhat trivial and reduces friction for numpy users adopting xarray. Is the exclusion of these operators intentional or oversight or some other historic reason? ### Describe the solution you'd like Implement the operators if it makes sense. ### Describe alternatives you've considered _No response_ ### Additional context I experimented with the potential edits here: https://github.com/abrammer/xarray/tree/feat/add_lshift_and_rshift_operators but don't want to open a PR without an initial discussion. I haven't delved into this area of xarray before so I probably missed something or did something wrong.","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/7727/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue 1659654612,PR_kwDOAMm_X85N4PWL,7741,Add lshift and rshift operators,6145107,closed,0,,,4,2023-04-08T21:45:46Z,2023-04-28T14:22:07Z,2023-04-28T14:22:07Z,CONTRIBUTOR,,0,pydata/xarray/pulls/7741,"This seems a little too easy, but the PR just adds lshift and rshit to `generate_ops.py` and `ops.py` then generated the 2 stub files with `generate_ops.py`. - [x] Closes #7727 - [x] Tests added for: - xr.Variable - DataArray - dask - groupby - [x] User visible changes (including notable bug fixes) are documented in `whats-new.rst` - There will be new `<<` `>>` syntax for dataarrays and datasets. - [x] New functions/methods are listed in `api.rst` - Existing basic math operators aren't really listed, that I can find. - Could add example code in the ""Data arrays also implement many numpy.ndarray methods:"" section of computation.rst ? I'll wait for initial review before spending time on whats-new and api docs. This enables bit shifting on arrays (when the type supports it). ```python import xarray as xr x = xr.DataArray(5) print(x << 1) # # array(10) x = xr.DataArray([0,1,2,3,4,5]) print(x << 1) # # array([ 0, 2, 4, 6, 8, 10]) # Dimensions without coordinates: dim_0 x = xr.DataArray([0,1,2,3,4,5]) print(x >> 1) # # array([0, 0, 1, 1, 2, 2]) # Dimensions without coordinates: dim_0 x = xr.DataArray([0,1,2,3,4,5.]) print(x >> 1) Traceback (most recent call last): File """", line 1, in File ""/workspaces/xarray/xarray/core/_typed_ops.py"", line 255, in __rshift__ return self._binary_op(other, operator.rshift) File ""/workspaces/xarray/xarray/core/dataarray.py"", line 4566, in _binary_op f(self.variable, other_variable) File ""/workspaces/xarray/xarray/core/_typed_ops.py"", line 461, in __rshift__ return self._binary_op(other, operator.rshift) File ""/workspaces/xarray/xarray/core/variable.py"", line 2662, in _binary_op f(self_data, other_data) if not reflexive else f(other_data, self_data) TypeError: ufunc 'right_shift' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe'' ```","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/7741/reactions"", ""total_count"": 1, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 1, ""rocket"": 0, ""eyes"": 0}",,,13221727,pull 448330247,MDExOlB1bGxSZXF1ZXN0MjgyMTQwNTM3,2989,Add strftime() to datetime accessor with cftimeindex and dask support,6145107,closed,0,,,4,2019-05-24T19:52:42Z,2019-06-01T07:51:43Z,2019-06-01T07:51:17Z,CONTRIBUTOR,,0,pydata/xarray/pulls/2989," - [x] Closes #2090 - [x] Tests added - [x] Fully documented, including `whats-new.rst` for all changes and `api.rst` for new API - [x] Add further examples to User Guide Docs Building on #2144, I added dask support and returning the appropriate object type. The two initial commits show alternate approach to handling cftime values. Either adding strftime to `cftimeindex` and accessing that way (commit 5de4db1) or just rolling the loop within the datetime accessor and not touching `cftimeindex` at all ( 51239c9). can revert commit 5de4db1 if its preferred to not touch `cftimeindex` for any reason. Can clean up docstrings and minor formatting after some input on the implementation details. Is there a vectorized or better method for the cftime values? List comprehension was the best I could come up with, borrowing from similar logic elsewhere in the code. ","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/2989/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,,13221727,pull