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 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