You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ce...@apache.org on 2012/09/18 08:38:34 UTC

svn commit: r1387002 - in /commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear: AbstractRealMatrix.java RealLinearOperator.java RealMatrix.java

Author: celestin
Date: Tue Sep 18 06:38:33 2012
New Revision: 1387002

URL: http://svn.apache.org/viewvc?rev=1387002&view=rev
Log:
MATH-854: populated throws clause of AbstractRealMatrix.

Modified:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/AbstractRealMatrix.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/RealLinearOperator.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/RealMatrix.java

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/AbstractRealMatrix.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/AbstractRealMatrix.java?rev=1387002&r1=1387001&r2=1387002&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/AbstractRealMatrix.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/AbstractRealMatrix.java Tue Sep 18 06:38:33 2012
@@ -21,9 +21,12 @@ import java.util.ArrayList;
 import java.util.Locale;
 
 import org.apache.commons.math3.exception.NoDataException;
+import org.apache.commons.math3.exception.NotPositiveException;
 import org.apache.commons.math3.exception.NotStrictlyPositiveException;
 import org.apache.commons.math3.exception.DimensionMismatchException;
 import org.apache.commons.math3.exception.NullArgumentException;
+import org.apache.commons.math3.exception.NumberIsTooSmallException;
+import org.apache.commons.math3.exception.OutOfRangeException;
 import org.apache.commons.math3.exception.util.LocalizedFormats;
 import org.apache.commons.math3.util.MathUtils;
 import org.apache.commons.math3.util.FastMath;
@@ -59,7 +62,9 @@ public abstract class AbstractRealMatrix
      * @param columnDimension  the number of columns in the new matrix
      * @throws NotStrictlyPositiveException if row or column dimension is not positive
      */
-    protected AbstractRealMatrix(final int rowDimension, final int columnDimension) {
+    protected AbstractRealMatrix(final int rowDimension,
+        final int columnDimension)
+        throws NotStrictlyPositiveException {
         if (rowDimension < 1) {
             throw new NotStrictlyPositiveException(rowDimension);
         }
@@ -75,8 +80,8 @@ public abstract class AbstractRealMatrix
     public abstract RealMatrix copy();
 
     /** {@inheritDoc} */
-    public RealMatrix add(RealMatrix m) {
-        // Safety check.
+    public RealMatrix add(RealMatrix m)
+        throws MatrixDimensionMismatchException {
         MatrixUtils.checkAdditionCompatible(this, m);
 
         final int rowCount    = getRowDimension();
@@ -92,8 +97,8 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public RealMatrix subtract(final RealMatrix m) {
-        // Safety check.
+    public RealMatrix subtract(final RealMatrix m)
+        throws MatrixDimensionMismatchException {
         MatrixUtils.checkSubtractionCompatible(this, m);
 
         final int rowCount    = getRowDimension();
@@ -137,8 +142,8 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public RealMatrix multiply(final RealMatrix m) {
-        // Safety check.
+    public RealMatrix multiply(final RealMatrix m)
+        throws DimensionMismatchException {
         MatrixUtils.checkMultiplicationCompatible(this, m);
 
         final int nRows = getRowDimension();
@@ -159,14 +164,16 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public RealMatrix preMultiply(final RealMatrix m) {
+    public RealMatrix preMultiply(final RealMatrix m)
+        throws DimensionMismatchException {
         return m.multiply(this);
     }
 
     /** {@inheritDoc} */
-    public RealMatrix power(final int p) {
+    public RealMatrix power(final int p)
+        throws NotPositiveException, NonSquareMatrixException {
         if (p < 0) {
-            throw new IllegalArgumentException("p must be >= 0");
+            throw new NotPositiveException(LocalizedFormats.NOT_POSITIVE_EXPONENT, p);
         }
 
         if (!isSquare()) {
@@ -302,7 +309,8 @@ public abstract class AbstractRealMatrix
 
     /** {@inheritDoc} */
     public RealMatrix getSubMatrix(final int startRow, final int endRow,
-                                   final int startColumn, final int endColumn) {
+                                   final int startColumn, final int endColumn)
+        throws OutOfRangeException, NumberIsTooSmallException {
         MatrixUtils.checkSubMatrixIndex(this, startRow, endRow, startColumn, endColumn);
 
         final RealMatrix subMatrix =
@@ -317,11 +325,11 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public RealMatrix getSubMatrix(final int[] selectedRows, final int[] selectedColumns) {
-        // safety checks
+    public RealMatrix getSubMatrix(final int[] selectedRows,
+                                   final int[] selectedColumns)
+        throws NullArgumentException, NoDataException, OutOfRangeException {
         MatrixUtils.checkSubMatrixIndex(this, selectedRows, selectedColumns);
 
-        // copy entries
         final RealMatrix subMatrix =
             createMatrix(selectedRows.length, selectedColumns.length);
         subMatrix.walkInOptimizedOrder(new DefaultRealMatrixChangingVisitor() {
@@ -340,8 +348,9 @@ public abstract class AbstractRealMatrix
     /** {@inheritDoc} */
     public void copySubMatrix(final int startRow, final int endRow,
                               final int startColumn, final int endColumn,
-                              final double[][] destination) {
-        // safety checks
+                              final double[][] destination)
+        throws OutOfRangeException, NumberIsTooSmallException,
+        MatrixDimensionMismatchException {
         MatrixUtils.checkSubMatrixIndex(this, startRow, endRow, startColumn, endColumn);
         final int rowsCount    = endRow + 1 - startRow;
         final int columnsCount = endColumn + 1 - startColumn;
@@ -350,7 +359,6 @@ public abstract class AbstractRealMatrix
                                                        rowsCount, columnsCount);
         }
 
-        // copy entries
         walkInOptimizedOrder(new DefaultRealMatrixPreservingVisitor() {
 
             /** Initial row index. */
@@ -378,8 +386,10 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public void copySubMatrix(int[] selectedRows, int[] selectedColumns, double[][] destination) {
-        // safety checks
+    public void copySubMatrix(int[] selectedRows, int[] selectedColumns,
+                              double[][] destination)
+        throws OutOfRangeException, NullArgumentException, NoDataException,
+        MatrixDimensionMismatchException {
         MatrixUtils.checkSubMatrixIndex(this, selectedRows, selectedColumns);
         if ((destination.length < selectedRows.length) ||
             (destination[0].length < selectedColumns.length)) {
@@ -387,7 +397,6 @@ public abstract class AbstractRealMatrix
                                                        selectedRows.length, selectedColumns.length);
         }
 
-        // copy entries
         for (int i = 0; i < selectedRows.length; i++) {
             final double[] destinationI = destination[i];
             for (int j = 0; j < selectedColumns.length; j++) {
@@ -398,7 +407,8 @@ public abstract class AbstractRealMatrix
 
     /** {@inheritDoc} */
     public void setSubMatrix(final double[][] subMatrix, final int row, final int column)
-        throws NoDataException, DimensionMismatchException, NullArgumentException {
+        throws NoDataException, OutOfRangeException,
+        DimensionMismatchException, NullArgumentException {
         MathUtils.checkNotNull(subMatrix);
         final int nRows = subMatrix.length;
         if (nRows == 0) {
@@ -429,7 +439,7 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public RealMatrix getRowMatrix(final int row) {
+    public RealMatrix getRowMatrix(final int row) throws OutOfRangeException {
         MatrixUtils.checkRowIndex(this, row);
         final int nCols = getColumnDimension();
         final RealMatrix out = createMatrix(1, nCols);
@@ -441,7 +451,8 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public void setRowMatrix(final int row, final RealMatrix matrix) {
+    public void setRowMatrix(final int row, final RealMatrix matrix)
+        throws OutOfRangeException, MatrixDimensionMismatchException {
         MatrixUtils.checkRowIndex(this, row);
         final int nCols = getColumnDimension();
         if ((matrix.getRowDimension() != 1) ||
@@ -456,7 +467,8 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public RealMatrix getColumnMatrix(final int column) {
+    public RealMatrix getColumnMatrix(final int column)
+        throws OutOfRangeException {
         MatrixUtils.checkColumnIndex(this, column);
         final int nRows = getRowDimension();
         final RealMatrix out = createMatrix(nRows, 1);
@@ -468,7 +480,8 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public void setColumnMatrix(final int column, final RealMatrix matrix) {
+    public void setColumnMatrix(final int column, final RealMatrix matrix)
+        throws OutOfRangeException, MatrixDimensionMismatchException {
         MatrixUtils.checkColumnIndex(this, column);
         final int nRows = getRowDimension();
         if ((matrix.getRowDimension() != nRows) ||
@@ -483,12 +496,14 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public RealVector getRowVector(final int row) {
+    public RealVector getRowVector(final int row)
+        throws OutOfRangeException {
         return new ArrayRealVector(getRow(row), false);
     }
 
     /** {@inheritDoc} */
-    public void setRowVector(final int row, final RealVector vector) {
+    public void setRowVector(final int row, final RealVector vector)
+        throws OutOfRangeException, MatrixDimensionMismatchException {
         MatrixUtils.checkRowIndex(this, row);
         final int nCols = getColumnDimension();
         if (vector.getDimension() != nCols) {
@@ -501,12 +516,14 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public RealVector getColumnVector(final int column) {
+    public RealVector getColumnVector(final int column)
+        throws OutOfRangeException {
         return new ArrayRealVector(getColumn(column), false);
     }
 
     /** {@inheritDoc} */
-    public void setColumnVector(final int column, final RealVector vector) {
+    public void setColumnVector(final int column, final RealVector vector)
+        throws OutOfRangeException, MatrixDimensionMismatchException {
         MatrixUtils.checkColumnIndex(this, column);
         final int nRows = getRowDimension();
         if (vector.getDimension() != nRows) {
@@ -519,7 +536,7 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public double[] getRow(final int row) {
+    public double[] getRow(final int row) throws OutOfRangeException {
         MatrixUtils.checkRowIndex(this, row);
         final int nCols = getColumnDimension();
         final double[] out = new double[nCols];
@@ -531,7 +548,8 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public void setRow(final int row, final double[] array) {
+    public void setRow(final int row, final double[] array)
+        throws OutOfRangeException, MatrixDimensionMismatchException {
         MatrixUtils.checkRowIndex(this, row);
         final int nCols = getColumnDimension();
         if (array.length != nCols) {
@@ -543,7 +561,7 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public double[] getColumn(final int column) {
+    public double[] getColumn(final int column) throws OutOfRangeException {
         MatrixUtils.checkColumnIndex(this, column);
         final int nRows = getRowDimension();
         final double[] out = new double[nRows];
@@ -555,7 +573,8 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public void setColumn(final int column, final double[] array) {
+    public void setColumn(final int column, final double[] array)
+        throws OutOfRangeException, MatrixDimensionMismatchException {
         MatrixUtils.checkColumnIndex(this, column);
         final int nRows = getRowDimension();
         if (array.length != nRows) {
@@ -573,13 +592,15 @@ public abstract class AbstractRealMatrix
     public abstract void setEntry(int row, int column, double value);
 
     /** {@inheritDoc} */
-    public void addToEntry(int row, int column, double increment) {
+    public void addToEntry(int row, int column, double increment)
+        throws OutOfRangeException {
         MatrixUtils.checkMatrixIndex(this, row, column);
         setEntry(row, column, getEntry(row, column) + increment);
     }
 
     /** {@inheritDoc} */
-    public void multiplyEntry(int row, int column, double factor) {
+    public void multiplyEntry(int row, int column, double factor)
+        throws OutOfRangeException {
         MatrixUtils.checkMatrixIndex(this, row, column);
         setEntry(row, column, getEntry(row, column) * factor);
     }
@@ -626,7 +647,7 @@ public abstract class AbstractRealMatrix
     public abstract int getColumnDimension();
 
     /** {@inheritDoc} */
-    public double getTrace() {
+    public double getTrace() throws NonSquareMatrixException {
         final int nRows = getRowDimension();
         final int nCols = getColumnDimension();
         if (nRows != nCols) {
@@ -640,7 +661,8 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public double[] operate(final double[] v) {
+    public double[] operate(final double[] v)
+        throws DimensionMismatchException {
         final int nRows = getRowDimension();
         final int nCols = getColumnDimension();
         if (v.length != nCols) {
@@ -661,7 +683,8 @@ public abstract class AbstractRealMatrix
 
     /** {@inheritDoc} */
     @Override
-    public RealVector operate(final RealVector v) {
+    public RealVector operate(final RealVector v)
+        throws DimensionMismatchException {
         try {
             return new ArrayRealVector(operate(((ArrayRealVector) v).getDataRef()), false);
         } catch (ClassCastException cce) {
@@ -685,7 +708,7 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public double[] preMultiply(final double[] v) {
+    public double[] preMultiply(final double[] v) throws DimensionMismatchException {
 
         final int nRows = getRowDimension();
         final int nCols = getColumnDimension();
@@ -706,7 +729,7 @@ public abstract class AbstractRealMatrix
     }
 
     /** {@inheritDoc} */
-    public RealVector preMultiply(final RealVector v) {
+    public RealVector preMultiply(final RealVector v) throws DimensionMismatchException {
         try {
             return new ArrayRealVector(preMultiply(((ArrayRealVector) v).getDataRef()), false);
         } catch (ClassCastException cce) {
@@ -761,7 +784,8 @@ public abstract class AbstractRealMatrix
     /** {@inheritDoc} */
     public double walkInRowOrder(final RealMatrixChangingVisitor visitor,
                                  final int startRow, final int endRow,
-                                 final int startColumn, final int endColumn) {
+                                 final int startColumn, final int endColumn)
+        throws OutOfRangeException, NumberIsTooSmallException {
         MatrixUtils.checkSubMatrixIndex(this, startRow, endRow, startColumn, endColumn);
         visitor.start(getRowDimension(), getColumnDimension(),
                       startRow, endRow, startColumn, endColumn);
@@ -778,7 +802,8 @@ public abstract class AbstractRealMatrix
     /** {@inheritDoc} */
     public double walkInRowOrder(final RealMatrixPreservingVisitor visitor,
                                  final int startRow, final int endRow,
-                                 final int startColumn, final int endColumn) {
+                                 final int startColumn, final int endColumn)
+        throws OutOfRangeException, NumberIsTooSmallException {
         MatrixUtils.checkSubMatrixIndex(this, startRow, endRow, startColumn, endColumn);
         visitor.start(getRowDimension(), getColumnDimension(),
                       startRow, endRow, startColumn, endColumn);
@@ -821,7 +846,8 @@ public abstract class AbstractRealMatrix
     /** {@inheritDoc} */
     public double walkInColumnOrder(final RealMatrixChangingVisitor visitor,
                                     final int startRow, final int endRow,
-                                    final int startColumn, final int endColumn) {
+                                    final int startColumn, final int endColumn)
+        throws OutOfRangeException, NumberIsTooSmallException {
         MatrixUtils.checkSubMatrixIndex(this, startRow, endRow, startColumn, endColumn);
         visitor.start(getRowDimension(), getColumnDimension(),
                       startRow, endRow, startColumn, endColumn);
@@ -838,7 +864,8 @@ public abstract class AbstractRealMatrix
     /** {@inheritDoc} */
     public double walkInColumnOrder(final RealMatrixPreservingVisitor visitor,
                                     final int startRow, final int endRow,
-                                    final int startColumn, final int endColumn) {
+                                    final int startColumn, final int endColumn)
+        throws OutOfRangeException, NumberIsTooSmallException {
         MatrixUtils.checkSubMatrixIndex(this, startRow, endRow, startColumn, endColumn);
         visitor.start(getRowDimension(), getColumnDimension(),
                       startRow, endRow, startColumn, endColumn);
@@ -863,14 +890,18 @@ public abstract class AbstractRealMatrix
     /** {@inheritDoc} */
     public double walkInOptimizedOrder(final RealMatrixChangingVisitor visitor,
                                        final int startRow, final int endRow,
-                                       final int startColumn, final int endColumn) {
+                                       final int startColumn,
+                                       final int endColumn)
+        throws OutOfRangeException, NumberIsTooSmallException {
         return walkInRowOrder(visitor, startRow, endRow, startColumn, endColumn);
     }
 
     /** {@inheritDoc} */
     public double walkInOptimizedOrder(final RealMatrixPreservingVisitor visitor,
                                        final int startRow, final int endRow,
-                                       final int startColumn, final int endColumn) {
+                                       final int startColumn,
+                                       final int endColumn)
+        throws OutOfRangeException, NumberIsTooSmallException {
         return walkInRowOrder(visitor, startRow, endRow, startColumn, endColumn);
     }
 

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/RealLinearOperator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/RealLinearOperator.java?rev=1387002&r1=1387001&r2=1387002&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/RealLinearOperator.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/RealLinearOperator.java Tue Sep 18 06:38:33 2012
@@ -70,10 +70,11 @@ public abstract class RealLinearOperator
      *
      * @param x the vector to operate on
      * @return the product of {@code this} instance with {@code x}
-     * @throws org.apache.commons.math3.exception.DimensionMismatchException
-     * if the column dimension does not match the size of {@code x}
+     * @throws DimensionMismatchException if the column dimension does not match
+     * the size of {@code x}
      */
-    public abstract RealVector operate(final RealVector x);
+    public abstract RealVector operate(final RealVector x)
+        throws DimensionMismatchException;
 
     /**
      * Returns the result of multiplying the transpose of {@code this} operator

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/RealMatrix.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/RealMatrix.java?rev=1387002&r1=1387001&r2=1387002&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/RealMatrix.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/RealMatrix.java Tue Sep 18 06:38:33 2012
@@ -18,11 +18,12 @@
 package org.apache.commons.math3.linear;
 
 import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.NoDataException;
 import org.apache.commons.math3.exception.NotPositiveException;
 import org.apache.commons.math3.exception.NotStrictlyPositiveException;
 import org.apache.commons.math3.exception.NullArgumentException;
+import org.apache.commons.math3.exception.NumberIsTooSmallException;
 import org.apache.commons.math3.exception.OutOfRangeException;
-import org.apache.commons.math3.exception.ZeroException;
 
 /**
  * Interface defining a real-valued matrix with basic algebraic operations.
@@ -164,56 +165,70 @@ public interface RealMatrix extends AnyM
      * @return The subMatrix containing the data of the
      * specified rows and columns.
      * @throws OutOfRangeException if the indices are not valid.
+     * @throws NumberIsTooSmallException if {@code endRow < startRow} or
+     * {@code endColumn < startColumn}.
      */
     RealMatrix getSubMatrix(int startRow, int endRow, int startColumn,
-        int endColumn)
-        throws OutOfRangeException;
+                            int endColumn)
+        throws OutOfRangeException, NumberIsTooSmallException;
 
     /**
-     * Gets a submatrix. Rows and columns are indicated
-     * counting from 0 to n-1.
+     * Gets a submatrix. Rows and columns are indicated counting from 0 to n-1.
      *
      * @param selectedRows Array of row indices.
      * @param selectedColumns Array of column indices.
-     * @return The subMatrix containing the data in the
-     * specified rows and columns
+     * @return The subMatrix containing the data in the specified rows and
+     * columns
+     * @throws NullArgumentException if the row or column selections are
+     * {@code null}
+     * @throws NoDataException if the row or column selections are empty (zero
+     * length).
      * @throws OutOfRangeException if the indices are not valid.
      */
     RealMatrix getSubMatrix(int[] selectedRows, int[] selectedColumns)
-        throws OutOfRangeException;
+        throws NullArgumentException, NoDataException, OutOfRangeException;
 
-   /**
-    * Copy a submatrix. Rows and columns are indicated counting from 0 to n-1.
-    *
-    * @param startRow Initial row index
-    * @param endRow Final row index (inclusive)
-    * @param startColumn Initial column index
-    * @param endColumn Final column index (inclusive)
-    * @param destination The arrays where the submatrix data should be copied
-    * (if larger than rows/columns counts, only the upper-left part will be used)
-    * @throws OutOfRangeException if the indices are not valid.
-    * @throws MatrixDimensionMismatchException if the destination array is too
-    * small.
-    */
+    /**
+     * Copy a submatrix. Rows and columns are indicated counting from 0 to n-1.
+     *
+     * @param startRow Initial row index
+     * @param endRow Final row index (inclusive)
+     * @param startColumn Initial column index
+     * @param endColumn Final column index (inclusive)
+     * @param destination The arrays where the submatrix data should be copied
+     * (if larger than rows/columns counts, only the upper-left part will be
+     * used)
+     * @throws OutOfRangeException if the indices are not valid.
+     * @throws NumberIsTooSmallException if {@code endRow < startRow} or
+     * {@code endColumn < startColumn}.
+     * @throws MatrixDimensionMismatchException if the destination array is too
+     * small.
+     */
     void copySubMatrix(int startRow, int endRow, int startColumn,
-        int endColumn, double[][] destination)
-        throws OutOfRangeException, MatrixDimensionMismatchException;
+                       int endColumn, double[][] destination)
+        throws OutOfRangeException, NumberIsTooSmallException,
+        MatrixDimensionMismatchException;
 
     /**
-     * Copy a submatrix. Rows and columns are indicated
-     * counting from 0 to n-1.
+     * Copy a submatrix. Rows and columns are indicated counting from 0 to n-1.
      *
      * @param selectedRows Array of row indices.
      * @param selectedColumns Array of column indices.
      * @param destination The arrays where the submatrix data should be copied
-     * (if larger than rows/columns counts, only the upper-left part will be used)
+     * (if larger than rows/columns counts, only the upper-left part will be
+     * used)
+     * @throws NullArgumentException if the row or column selections are
+     * {@code null}
+     * @throws NoDataException if the row or column selections are empty (zero
+     * length).
      * @throws OutOfRangeException if the indices are not valid.
      * @throws MatrixDimensionMismatchException if the destination array is too
      * small.
      */
     void copySubMatrix(int[] selectedRows, int[] selectedColumns,
-        double[][] destination)
-        throws OutOfRangeException, MatrixDimensionMismatchException;
+                       double[][] destination)
+        throws OutOfRangeException, NullArgumentException, NoDataException,
+        MatrixDimensionMismatchException;
 
    /**
     * Replace the submatrix starting at {@code row, column} using data in the
@@ -235,16 +250,17 @@ public interface RealMatrix extends AnyM
     * @param subMatrix  array containing the submatrix replacement data
     * @param row  row coordinate of the top, left element to be replaced
     * @param column  column coordinate of the top, left element to be replaced
-    * @throws ZeroException if {@code subMatrix} does not contain at least one column.
+    * @throws NoDataException if {@code subMatrix} is empty.
     * @throws OutOfRangeException if {@code subMatrix} does not fit into
     * this matrix from element in {@code (row, column)}.
-    * @throws DimensionMismatchException if {@code subMatrix} is not rectangular.
+    * @throws DimensionMismatchException if {@code subMatrix} is not rectangular
     * (not all rows have the same length) or empty.
     * @throws NullArgumentException if {@code subMatrix} is {@code null}.
     * @since 2.0
     */
     void setSubMatrix(double[][] subMatrix, int row, int column)
-        throws ZeroException, OutOfRangeException, DimensionMismatchException, NullArgumentException;
+        throws NoDataException, OutOfRangeException,
+        DimensionMismatchException, NullArgumentException;
 
    /**
     * Get the entries at the given row index as a row matrix.  Row indices start
@@ -552,6 +568,8 @@ public interface RealMatrix extends AnyM
      * @param startColumn Initial column index
      * @param endColumn Final column index
      * @throws OutOfRangeException if the indices are not valid.
+     * @throws NumberIsTooSmallException if {@code endRow < startRow} or
+     * {@code endColumn < startColumn}.
      * @see #walkInRowOrder(RealMatrixChangingVisitor)
      * @see #walkInRowOrder(RealMatrixPreservingVisitor)
      * @see #walkInRowOrder(RealMatrixPreservingVisitor, int, int, int, int)
@@ -568,7 +586,7 @@ public interface RealMatrix extends AnyM
      */
     double walkInRowOrder(RealMatrixChangingVisitor visitor, int startRow,
         int endRow, int startColumn, int endColumn)
-        throws OutOfRangeException;
+        throws OutOfRangeException, NumberIsTooSmallException;
 
     /**
      * Visit (but don't change) some matrix entries in row order.
@@ -581,6 +599,8 @@ public interface RealMatrix extends AnyM
      * @param startColumn Initial column index
      * @param endColumn Final column index
      * @throws OutOfRangeException if the indices are not valid.
+     * @throws NumberIsTooSmallException if {@code endRow < startRow} or
+     * {@code endColumn < startColumn}.
      * @see #walkInRowOrder(RealMatrixChangingVisitor)
      * @see #walkInRowOrder(RealMatrixPreservingVisitor)
      * @see #walkInRowOrder(RealMatrixChangingVisitor, int, int, int, int)
@@ -597,7 +617,7 @@ public interface RealMatrix extends AnyM
      */
     double walkInRowOrder(RealMatrixPreservingVisitor visitor, int startRow,
         int endRow, int startColumn, int endColumn)
-        throws OutOfRangeException;
+        throws OutOfRangeException, NumberIsTooSmallException;
 
     /**
      * Visit (and possibly change) all matrix entries in column order.
@@ -654,6 +674,8 @@ public interface RealMatrix extends AnyM
      * @param startColumn Initial column index
      * @param endColumn Final column index
      * @throws OutOfRangeException if the indices are not valid.
+     * @throws NumberIsTooSmallException if {@code endRow < startRow} or
+     * {@code endColumn < startColumn}.
      * @see #walkInRowOrder(RealMatrixChangingVisitor)
      * @see #walkInRowOrder(RealMatrixPreservingVisitor)
      * @see #walkInRowOrder(RealMatrixChangingVisitor, int, int, int, int)
@@ -670,7 +692,7 @@ public interface RealMatrix extends AnyM
      */
     double walkInColumnOrder(RealMatrixChangingVisitor visitor, int startRow,
         int endRow, int startColumn, int endColumn)
-        throws OutOfRangeException;
+        throws OutOfRangeException, NumberIsTooSmallException;
 
     /**
      * Visit (but don't change) some matrix entries in column order.
@@ -683,6 +705,8 @@ public interface RealMatrix extends AnyM
      * @param startColumn Initial column index
      * @param endColumn Final column index
      * @throws OutOfRangeException if the indices are not valid.
+     * @throws NumberIsTooSmallException if {@code endRow < startRow} or
+     * {@code endColumn < startColumn}.
      * @see #walkInRowOrder(RealMatrixChangingVisitor)
      * @see #walkInRowOrder(RealMatrixPreservingVisitor)
      * @see #walkInRowOrder(RealMatrixChangingVisitor, int, int, int, int)
@@ -699,7 +723,7 @@ public interface RealMatrix extends AnyM
      */
     double walkInColumnOrder(RealMatrixPreservingVisitor visitor, int startRow,
         int endRow, int startColumn, int endColumn)
-        throws OutOfRangeException;
+        throws OutOfRangeException, NumberIsTooSmallException;
 
     /**
      * Visit (and possibly change) all matrix entries using the fastest possible order.
@@ -753,6 +777,8 @@ public interface RealMatrix extends AnyM
      * @param startColumn Initial column index
      * @param endColumn Final column index (inclusive)
      * @throws OutOfRangeException if the indices are not valid.
+     * @throws NumberIsTooSmallException if {@code endRow < startRow} or
+     * {@code endColumn < startColumn}.
      * @see #walkInRowOrder(RealMatrixChangingVisitor)
      * @see #walkInRowOrder(RealMatrixPreservingVisitor)
      * @see #walkInRowOrder(RealMatrixChangingVisitor, int, int, int, int)
@@ -769,7 +795,7 @@ public interface RealMatrix extends AnyM
      */
     double walkInOptimizedOrder(RealMatrixChangingVisitor visitor,
         int startRow, int endRow, int startColumn, int endColumn)
-        throws OutOfRangeException;
+        throws OutOfRangeException, NumberIsTooSmallException;
 
     /**
      * Visit (but don't change) some matrix entries using the fastest possible order.
@@ -781,6 +807,8 @@ public interface RealMatrix extends AnyM
      * @param startColumn Initial column index
      * @param endColumn Final column index (inclusive)
      * @throws OutOfRangeException if the indices are not valid.
+     * @throws NumberIsTooSmallException if {@code endRow < startRow} or
+     * {@code endColumn < startColumn}.
      * @see #walkInRowOrder(RealMatrixChangingVisitor)
      * @see #walkInRowOrder(RealMatrixPreservingVisitor)
      * @see #walkInRowOrder(RealMatrixChangingVisitor, int, int, int, int)
@@ -797,5 +825,5 @@ public interface RealMatrix extends AnyM
      */
     double walkInOptimizedOrder(RealMatrixPreservingVisitor visitor,
         int startRow, int endRow, int startColumn, int endColumn)
-        throws OutOfRangeException;
+        throws OutOfRangeException, NumberIsTooSmallException;
 }