in tensorboard/components/tensor_widget/selection.ts [207:284]
public move(
direction: MoveDirection,
slicingSpec: TensorViewSlicingSpec
): MoveDirection | null {
let slicingMoveDirection: MoveDirection | null = null;
if (this.rank === 0) {
// No-op for a scalar.
return null;
}
if (
this.rank === 1 &&
(direction === MoveDirection.LEFT || direction === MoveDirection.RIGHT)
) {
// No-op for moving left or right in a 1D tensor.
return null;
}
if (
slicingSpec.verticalRange === null ||
slicingSpec.verticalRange[1] === null
) {
throw new Error(`Failed to move due to undetermined vertical range.`);
}
if (direction === MoveDirection.UP) {
if (this.rowStart > 0) {
this.rowStart--;
if (
slicingSpec.verticalRange != null &&
this.rowStart < slicingSpec.verticalRange[0]
) {
slicingMoveDirection = MoveDirection.UP;
}
}
} else if (direction === MoveDirection.DOWN) {
if (
slicingSpec.viewingDims != null &&
slicingSpec.viewingDims[0] != null &&
this.rowStart < this.shape[slicingSpec.viewingDims[0]] - 1
) {
this.rowStart++;
if (
slicingSpec.verticalRange != null &&
this.rowStart >= slicingSpec.verticalRange[1]
) {
slicingMoveDirection = MoveDirection.DOWN;
}
}
} else if (direction === MoveDirection.LEFT) {
if (this.colStart > 0) {
this.colStart--;
if (
slicingSpec.horizontalRange != null &&
this.colStart < slicingSpec.horizontalRange[0]
) {
slicingMoveDirection = MoveDirection.LEFT;
}
}
} else if (direction === MoveDirection.RIGHT) {
if (
slicingSpec.viewingDims != null &&
slicingSpec.viewingDims[1] != null &&
this.colStart < this.shape[slicingSpec.viewingDims[1]] - 1
) {
this.colStart++;
if (
slicingSpec.horizontalRange != null &&
this.colStart >= (slicingSpec.horizontalRange[1] as number)
) {
slicingMoveDirection = MoveDirection.RIGHT;
}
}
}
// Moving the selection causes the selection size to collapse to 1x1.
this.rowCount = 1;
this.colCount = 1;
return slicingMoveDirection;
}