public move()

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;
  }