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

Method coarsen_reshape

xarray/core/variable.py:2274–2339  ·  view source on GitHub ↗

Construct a reshaped-array for coarsen

(self, windows, boundary, side)

Source from the content-addressed store, hash-verified

2272 return self._replace(data=func(reshaped, axis=axes, **kwargs), attrs=_attrs)
2273
2274 def coarsen_reshape(self, windows, boundary, side):
2275 """
2276 Construct a reshaped-array for coarsen
2277 """
2278 if not is_dict_like(boundary):
2279 boundary = dict.fromkeys(windows.keys(), boundary)
2280
2281 if not is_dict_like(side):
2282 side = dict.fromkeys(windows.keys(), side)
2283
2284 # remove unrelated dimensions
2285 boundary = {k: v for k, v in boundary.items() if k in windows}
2286 side = {k: v for k, v in side.items() if k in windows}
2287
2288 for d, window in windows.items():
2289 if window <= 0:
2290 raise ValueError(
2291 f"window must be > 0. Given {window} for dimension {d}"
2292 )
2293
2294 variable = self
2295 pad_widths = {}
2296 for d, window in windows.items():
2297 # trim or pad the object
2298 size = variable.shape[self._get_axis_num(d)]
2299 n = int(size / window)
2300 if boundary[d] == "exact":
2301 if n * window != size:
2302 raise ValueError(
2303 f"Could not coarsen a dimension of size {size} with "
2304 f"window {window} and boundary='exact'. Try a different 'boundary' option."
2305 )
2306 elif boundary[d] == "trim":
2307 if side[d] == "left":
2308 variable = variable.isel({d: slice(0, window * n)})
2309 else:
2310 excess = size - window * n
2311 variable = variable.isel({d: slice(excess, None)})
2312 elif boundary[d] == "pad": # pad
2313 pad = window * n - size
2314 if pad < 0:
2315 pad += window
2316 elif pad == 0:
2317 continue
2318 pad_widths[d] = (0, pad) if side[d] == "left" else (pad, 0)
2319 else:
2320 raise TypeError(
2321 f"{boundary[d]} is invalid for boundary. Valid option is 'exact', "
2322 "'trim' and 'pad'"
2323 )
2324 if pad_widths:
2325 variable = variable.pad(pad_widths, mode="constant")
2326
2327 shape = []
2328 axes = []
2329 axis_count = 0
2330 for i, d in enumerate(variable.dims):
2331 if d in windows:

Callers 2

coarsenMethod · 0.95
constructMethod · 0.80

Calls 6

is_dict_likeFunction · 0.90
keysMethod · 0.80
itemsMethod · 0.80
_get_axis_numMethod · 0.45
iselMethod · 0.45
padMethod · 0.45

Tested by

no test coverage detected