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/issues/6517#issuecomment-1110354387,https://api.github.com/repos/pydata/xarray/issues/6517,1110354387,IC_kwDOAMm_X85CLqnT,5635139,2022-04-26T23:48:44Z,2022-04-26T23:48:44Z,MEMBER,"I don't know this well — maybe others can comment — but the example checks out. Would we take this as a PR? Is there a simpler way to express that logic?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1216517115 https://github.com/pydata/xarray/issues/6517#issuecomment-1110353767,https://api.github.com/repos/pydata/xarray/issues/6517,1110353767,IC_kwDOAMm_X85CLqdn,5635139,2022-04-26T23:47:14Z,2022-04-26T23:47:14Z,MEMBER,"For others, here's the diff: ```diff diff --git ""indexing.original.py"" ""indexing.patched.py"" --- ""indexing.original.py"" +++ ""indexing.patched.py"" @@ -709,8 +709,12 @@ def explicit_indexing_adapter( """""" raw_key, numpy_indices = decompose_indexer(key, shape, indexing_support) result = raw_indexing_method(raw_key.tuple) - if numpy_indices.tuple: - result = NumpyIndexingAdapter(np.asarray(result))[numpy_indices] + if numpy_indices.tuple and (not isinstance(result, np.ndarray) + or not all(i == slice(None, None, None) for i in numpy_indices.tuple)): + # The conditions within parentehses are to avoid unnecessary array slice/view-creation + # that would set flags['OWNDATA'] to False for no reason. + # Index the loaded np.ndarray. + result = NumpyIndexingAdapter(np.asarray(result))[numpy_indices] return result @@ -1156,6 +1160,11 @@ class NumpyIndexingAdapter(ExplicitlyIndexedNDArrayMixin): def __getitem__(self, key): array, key = self._indexing_array_and_key(key) + if ((len(key) == len(array.shape) or (len(key) == len(array.shape) + 1 and key[-1] is ...)) + and all(isinstance(i, slice) and i == slice(None, None, None) for i in key[:len(array.shape)]) + and isinstance(array, np.ndarray)): # (The isinstance-check is because nputils.NumpyVIndexAdapter() has not been tested.) + # Avoid unnecessary array slice/view-creation that would set flags['OWNDATA'] to False for no reason. + return array return array[key] def __setitem__(self, key, value): ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1216517115