///|
pub fn Tensor::crop(
self : Tensor,
start : Array[Int32],
sizes : Array[Int32],
limits~ : Limits = Limits::default(),
) -> Tensor raise NrrdError {
if start.length() != self.shape.dimension() ||
sizes.length() != self.shape.dimension() {
raise Invalid("crop dimension")
}
let shape = Shape::new(sizes, limits~)
for axis, first in start {
if first < 0 ||
first >= self.shape.axes[axis] ||
sizes[axis] > self.shape.axes[axis] - first {
raise Invalid("crop outside raster")
}
}
ignore(shape.byte_count(self.scalar, limits))
let values = Array::make(shape.count, 0.0)
for i in 0.. Tensor raise NrrdError {
check_axis(self.shape, axis)
if self.shape.dimension() == 1 {
raise Unsupported("zero-dimensional output")
}
if position < 0 || position >= self.shape.axes[axis] {
raise Invalid("slice position")
}
let axes = []
for a in 0..