|
23 | 23 | NDArrayMixin,
|
24 | 24 | either_dict_or_kwargs,
|
25 | 25 | get_valid_numpy_dtype,
|
| 26 | + is_scalar, |
26 | 27 | to_0d_array,
|
27 | 28 | )
|
28 | 29 |
|
@@ -980,12 +981,25 @@ def _decompose_outer_indexer(
|
980 | 981 | [14, 15, 14],
|
981 | 982 | [ 8, 9, 8]])
|
982 | 983 | """
|
983 |
| - if indexing_support == IndexingSupport.VECTORIZED: |
984 |
| - return indexer, BasicIndexer(()) |
985 |
| - assert isinstance(indexer, (OuterIndexer, BasicIndexer)) |
986 |
| - |
987 | 984 | backend_indexer: list[Any] = []
|
988 | 985 | np_indexer = []
|
| 986 | + |
| 987 | + assert isinstance(indexer, (OuterIndexer, BasicIndexer)) |
| 988 | + |
| 989 | + if indexing_support == IndexingSupport.VECTORIZED: |
| 990 | + for k, s in zip(indexer.tuple, shape): |
| 991 | + if isinstance(k, slice): |
| 992 | + # If it is a slice, then we will slice it as-is |
| 993 | + # (but make its step positive) in the backend, |
| 994 | + bk_slice, np_slice = _decompose_slice(k, s) |
| 995 | + backend_indexer.append(bk_slice) |
| 996 | + np_indexer.append(np_slice) |
| 997 | + else: |
| 998 | + backend_indexer.append(k) |
| 999 | + if not is_scalar(k): |
| 1000 | + np_indexer.append(slice(None)) |
| 1001 | + return type(indexer)(tuple(backend_indexer)), BasicIndexer(tuple(np_indexer)) |
| 1002 | + |
989 | 1003 | # make indexer positive
|
990 | 1004 | pos_indexer: list[np.ndarray | int | np.number] = []
|
991 | 1005 | for k, s in zip(indexer.tuple, shape):
|
|
0 commit comments