MCPcopy Index your code
hub / github.com/pydata/xarray / _decompose_slice

Function _decompose_slice

xarray/core/indexing.py:1209–1234  ·  view source on GitHub ↗

convert a slice to successive two slices. The first slice always has a positive step. >>> _decompose_slice(slice(2, 98, 2), 99) (slice(2, 98, 2), slice(None, None, None)) >>> _decompose_slice(slice(98, 2, -2), 99) (slice(4, 99, 2), slice(None, None, -1)) >>> _decompose_sli

(key: slice, size: int)

Source from the content-addressed store, hash-verified

1207
1208
1209def _decompose_slice(key: slice, size: int) -> tuple[slice, slice]:
1210 """convert a slice to successive two slices. The first slice always has
1211 a positive step.
1212
1213 >>> _decompose_slice(slice(2, 98, 2), 99)
1214 (slice(2, 98, 2), slice(None, None, None))
1215
1216 >>> _decompose_slice(slice(98, 2, -2), 99)
1217 (slice(4, 99, 2), slice(None, None, -1))
1218
1219 >>> _decompose_slice(slice(98, 2, -2), 98)
1220 (slice(3, 98, 2), slice(None, None, -1))
1221
1222 >>> _decompose_slice(slice(360, None, -10), 361)
1223 (slice(0, 361, 10), slice(None, None, -1))
1224 """
1225 start, stop, step = key.indices(size)
1226 if step > 0:
1227 # If key already has a positive step, use it as is in the backend
1228 return key, slice(None)
1229 else:
1230 # determine stop precisely for step > 1 case
1231 # Use the range object to do the calculation
1232 # e.g. [98:2:-2] -> [98:3:-2]
1233 exact_stop = range(start, stop, step)[-1]
1234 return slice(exact_stop, start + 1, -step), slice(None, None, -1)
1235
1236
1237def _decompose_vectorized_indexer(

Callers 2

_decompose_outer_indexerFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…