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/14 08:42:06 UTC

svn commit: r1384654 - in /commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear: ArrayFieldVector.java FieldVector.java SparseFieldVector.java

Author: celestin
Date: Fri Sep 14 06:42:06 2012
New Revision: 1384654

URL: http://svn.apache.org/viewvc?rev=1384654&view=rev
Log:
  - Populated throws clause of FieldVector, ArrayFieldVector, SparseFieldVector (MATH-854).
  - Added some missing precondition checks.
  - Corrected some mistakes in javadoc.

Modified:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/ArrayFieldVector.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/FieldVector.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/SparseFieldVector.java

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/ArrayFieldVector.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/ArrayFieldVector.java?rev=1384654&r1=1384653&r2=1384654&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/ArrayFieldVector.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/ArrayFieldVector.java Fri Sep 14 06:42:06 2012
@@ -477,7 +477,7 @@ public class ArrayFieldVector<T extends 
     }
 
     /** {@inheritDoc} */
-    public FieldVector<T> mapAdd(T d) {
+    public FieldVector<T> mapAdd(T d) throws NullArgumentException {
         T[] out = buildArray(data.length);
         for (int i = 0; i < data.length; i++) {
             out[i] = data[i].add(d);
@@ -486,7 +486,7 @@ public class ArrayFieldVector<T extends 
     }
 
     /** {@inheritDoc} */
-    public FieldVector<T> mapAddToSelf(T d) {
+    public FieldVector<T> mapAddToSelf(T d) throws NullArgumentException {
         for (int i = 0; i < data.length; i++) {
             data[i] = data[i].add(d);
         }
@@ -494,7 +494,7 @@ public class ArrayFieldVector<T extends 
     }
 
     /** {@inheritDoc} */
-    public FieldVector<T> mapSubtract(T d) {
+    public FieldVector<T> mapSubtract(T d) throws NullArgumentException {
         T[] out = buildArray(data.length);
         for (int i = 0; i < data.length; i++) {
             out[i] = data[i].subtract(d);
@@ -503,7 +503,7 @@ public class ArrayFieldVector<T extends 
     }
 
     /** {@inheritDoc} */
-    public FieldVector<T> mapSubtractToSelf(T d) {
+    public FieldVector<T> mapSubtractToSelf(T d) throws NullArgumentException {
         for (int i = 0; i < data.length; i++) {
             data[i] = data[i].subtract(d);
         }
@@ -511,7 +511,7 @@ public class ArrayFieldVector<T extends 
     }
 
     /** {@inheritDoc} */
-    public FieldVector<T> mapMultiply(T d) {
+    public FieldVector<T> mapMultiply(T d) throws NullArgumentException {
         T[] out = buildArray(data.length);
         for (int i = 0; i < data.length; i++) {
             out[i] = data[i].multiply(d);
@@ -520,7 +520,7 @@ public class ArrayFieldVector<T extends 
     }
 
     /** {@inheritDoc} */
-    public FieldVector<T> mapMultiplyToSelf(T d) {
+    public FieldVector<T> mapMultiplyToSelf(T d) throws NullArgumentException {
         for (int i = 0; i < data.length; i++) {
             data[i] = data[i].multiply(d);
         }

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/FieldVector.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/FieldVector.java?rev=1384654&r1=1384653&r2=1384654&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/FieldVector.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/FieldVector.java Fri Sep 14 06:42:06 2012
@@ -74,7 +74,7 @@ public interface FieldVector<T extends F
     /**
      * Compute {@code this} minus {@code v}.
      * @param v vector to be subtracted
-     * @return {@code this + v}
+     * @return {@code this - v}
      * @throws DimensionMismatchException if {@code v} is not the same size as
      * {@code this}
      */
@@ -84,46 +84,52 @@ public interface FieldVector<T extends F
      * Map an addition operation to each entry.
      * @param d value to be added to each entry
      * @return {@code this + d}
+     * @throws NullArgumentException if {@code d} is {@code null}.
      */
-    FieldVector<T> mapAdd(T d);
+    FieldVector<T> mapAdd(T d) throws NullArgumentException;
 
     /**
      * Map an addition operation to each entry.
      * <p>The instance <strong>is</strong> changed by this method.</p>
      * @param d value to be added to each entry
      * @return for convenience, return {@code this}
+     * @throws NullArgumentException if {@code d} is {@code null}.
      */
-    FieldVector<T> mapAddToSelf(T d);
+    FieldVector<T> mapAddToSelf(T d) throws NullArgumentException;
 
     /**
      * Map a subtraction operation to each entry.
      * @param d value to be subtracted to each entry
      * @return {@code this - d}
+     * @throws NullArgumentException if {@code d} is {@code null}
      */
-    FieldVector<T> mapSubtract(T d);
+    FieldVector<T> mapSubtract(T d) throws NullArgumentException;
 
     /**
      * Map a subtraction operation to each entry.
      * <p>The instance <strong>is</strong> changed by this method.</p>
      * @param d value to be subtracted to each entry
      * @return for convenience, return {@code this}
+     * @throws NullArgumentException if {@code d} is {@code null}
      */
-    FieldVector<T> mapSubtractToSelf(T d);
+    FieldVector<T> mapSubtractToSelf(T d) throws NullArgumentException;
 
     /**
      * Map a multiplication operation to each entry.
      * @param d value to multiply all entries by
      * @return {@code this * d}
+     * @throws NullArgumentException if {@code d} is {@code null}.
      */
-    FieldVector<T> mapMultiply(T d);
+    FieldVector<T> mapMultiply(T d) throws NullArgumentException;
 
     /**
      * Map a multiplication operation to each entry.
      * <p>The instance <strong>is</strong> changed by this method.</p>
      * @param d value to multiply all entries by
      * @return for convenience, return {@code this}
+     * @throws NullArgumentException if {@code d} is {@code null}.
      */
-    FieldVector<T> mapMultiplyToSelf(T d);
+    FieldVector<T> mapMultiplyToSelf(T d) throws NullArgumentException;
 
     /**
      * Map a division operation to each entry.

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/SparseFieldVector.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/SparseFieldVector.java?rev=1384654&r1=1384653&r2=1384654&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/SparseFieldVector.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/linear/SparseFieldVector.java Fri Sep 14 06:42:06 2012
@@ -21,8 +21,12 @@ import java.lang.reflect.Array;
 
 import org.apache.commons.math3.Field;
 import org.apache.commons.math3.FieldElement;
+import org.apache.commons.math3.exception.MathArithmeticException;
+import org.apache.commons.math3.exception.NotPositiveException;
+import org.apache.commons.math3.exception.NullArgumentException;
 import org.apache.commons.math3.exception.OutOfRangeException;
 import org.apache.commons.math3.exception.DimensionMismatchException;
+import org.apache.commons.math3.exception.util.LocalizedFormats;
 import org.apache.commons.math3.util.OpenIntToFieldHashMap;
 
 /**
@@ -135,11 +139,12 @@ public class SparseFieldVector<T extends
      * Optimized method to add sparse vectors.
      *
      * @param v Vector to add.
-     * @return the sum of {@code this} and {@code v}.
-     * @throws DimensionMismatchException
-     * if the dimensions do not match.
+     * @return {@code this + v}.
+     * @throws DimensionMismatchException if {@code v} is not the same size as
+     * {@code this}.
      */
-    public FieldVector<T> add(SparseFieldVector<T> v) {
+    public FieldVector<T> add(SparseFieldVector<T> v)
+        throws DimensionMismatchException {
         checkVectorDimensions(v.getDimension());
         SparseFieldVector<T> res = (SparseFieldVector<T>)copy();
         OpenIntToFieldHashMap<T>.Iterator iter = v.getEntries().iterator();
@@ -200,7 +205,7 @@ public class SparseFieldVector<T extends
    }
 
     /** {@inheritDoc} */
-    public T dotProduct(FieldVector<T> v) {
+    public T dotProduct(FieldVector<T> v) throws DimensionMismatchException {
         checkVectorDimensions(v.getDimension());
         T res = field.getZero();
         OpenIntToFieldHashMap<T>.Iterator iter = entries.iterator();
@@ -212,7 +217,8 @@ public class SparseFieldVector<T extends
     }
 
     /** {@inheritDoc} */
-    public FieldVector<T> ebeDivide(FieldVector<T> v) {
+    public FieldVector<T> ebeDivide(FieldVector<T> v)
+        throws DimensionMismatchException, MathArithmeticException {
         checkVectorDimensions(v.getDimension());
         SparseFieldVector<T> res = new SparseFieldVector<T>(this);
         OpenIntToFieldHashMap<T>.Iterator iter = res.entries.iterator();
@@ -224,7 +230,8 @@ public class SparseFieldVector<T extends
     }
 
     /** {@inheritDoc} */
-    public FieldVector<T> ebeMultiply(FieldVector<T> v) {
+    public FieldVector<T> ebeMultiply(FieldVector<T> v)
+        throws DimensionMismatchException {
         checkVectorDimensions(v.getDimension());
         SparseFieldVector<T> res = new SparseFieldVector<T>(this);
         OpenIntToFieldHashMap<T>.Iterator iter = res.entries.iterator();
@@ -252,7 +259,7 @@ public class SparseFieldVector<T extends
     }
 
      /** {@inheritDoc} */
-     public T getEntry(int index) {
+     public T getEntry(int index) throws OutOfRangeException {
         checkIndex(index);
         return entries.get(index);
    }
@@ -263,7 +270,11 @@ public class SparseFieldVector<T extends
     }
 
      /** {@inheritDoc} */
-     public FieldVector<T> getSubVector(int index, int n) {
+    public FieldVector<T> getSubVector(int index, int n)
+        throws OutOfRangeException, NotPositiveException {
+        if (n < 0) {
+            throw new NotPositiveException(LocalizedFormats.NUMBER_OF_ELEMENTS_SHOULD_BE_POSITIVE, n);
+        }
         checkIndex(index);
         checkIndex(index + n - 1);
         SparseFieldVector<T> res = new SparseFieldVector<T>(field,n);
@@ -280,12 +291,12 @@ public class SparseFieldVector<T extends
     }
 
      /** {@inheritDoc} */
-     public FieldVector<T> mapAdd(T d) {
+     public FieldVector<T> mapAdd(T d) throws NullArgumentException {
         return copy().mapAddToSelf(d);
    }
 
      /** {@inheritDoc} */
-     public FieldVector<T> mapAddToSelf(T d) {
+     public FieldVector<T> mapAddToSelf(T d) throws NullArgumentException {
         for (int i = 0; i < virtualSize; i++) {
             setEntry(i, getEntry(i).add(d));
         }
@@ -293,12 +304,14 @@ public class SparseFieldVector<T extends
     }
 
      /** {@inheritDoc} */
-     public FieldVector<T> mapDivide(T d) {
+    public FieldVector<T> mapDivide(T d)
+        throws NullArgumentException, MathArithmeticException {
         return copy().mapDivideToSelf(d);
     }
 
      /** {@inheritDoc} */
-     public FieldVector<T> mapDivideToSelf(T d) {
+    public FieldVector<T> mapDivideToSelf(T d)
+        throws NullArgumentException, MathArithmeticException {
         OpenIntToFieldHashMap<T>.Iterator iter = entries.iterator();
         while (iter.hasNext()) {
             iter.advance();
@@ -308,12 +321,12 @@ public class SparseFieldVector<T extends
    }
 
      /** {@inheritDoc} */
-     public FieldVector<T> mapInv() {
+     public FieldVector<T> mapInv() throws MathArithmeticException {
         return copy().mapInvToSelf();
    }
 
      /** {@inheritDoc} */
-     public FieldVector<T> mapInvToSelf() {
+     public FieldVector<T> mapInvToSelf() throws MathArithmeticException {
         for (int i = 0; i < virtualSize; i++) {
             setEntry(i, field.getOne().divide(getEntry(i)));
         }
@@ -321,12 +334,12 @@ public class SparseFieldVector<T extends
    }
 
      /** {@inheritDoc} */
-     public FieldVector<T> mapMultiply(T d) {
+     public FieldVector<T> mapMultiply(T d) throws NullArgumentException {
         return copy().mapMultiplyToSelf(d);
     }
 
      /** {@inheritDoc} */
-     public FieldVector<T> mapMultiplyToSelf(T d) {
+     public FieldVector<T> mapMultiplyToSelf(T d) throws NullArgumentException {
         OpenIntToFieldHashMap<T>.Iterator iter = entries.iterator();
         while (iter.hasNext()) {
             iter.advance();
@@ -336,21 +349,19 @@ public class SparseFieldVector<T extends
    }
 
      /** {@inheritDoc} */
-     public FieldVector<T> mapSubtract(T d) {
+     public FieldVector<T> mapSubtract(T d) throws NullArgumentException {
         return copy().mapSubtractToSelf(d);
     }
 
      /** {@inheritDoc} */
-     public FieldVector<T> mapSubtractToSelf(T d) {
+     public FieldVector<T> mapSubtractToSelf(T d) throws NullArgumentException {
         return mapAddToSelf(field.getZero().subtract(d));
     }
 
     /**
      * Optimized method to compute outer product when both vectors are sparse.
      * @param v vector with which outer product should be computed
-     * @return the square matrix outer product between instance and v
-     * @throws DimensionMismatchException
-     * if the dimensions do not match.
+     * @return the matrix outer product between instance and v
      */
     public FieldMatrix<T> outerProduct(SparseFieldVector<T> v) {
         final int n = v.getDimension();
@@ -388,7 +399,8 @@ public class SparseFieldVector<T extends
     }
 
     /** {@inheritDoc} */
-    public FieldVector<T> projection(FieldVector<T> v) {
+    public FieldVector<T> projection(FieldVector<T> v)
+        throws DimensionMismatchException, MathArithmeticException {
         checkVectorDimensions(v.getDimension());
         return v.mapMultiply(dotProduct(v).divide(v.dotProduct(v)));
     }
@@ -401,13 +413,14 @@ public class SparseFieldVector<T extends
     }
 
     /** {@inheritDoc} */
-    public void setEntry(int index, T value) {
+    public void setEntry(int index, T value) throws OutOfRangeException {
         checkIndex(index);
         entries.put(index, value);
    }
 
     /** {@inheritDoc} */
-    public void setSubVector(int index, FieldVector<T> v) {
+    public void setSubVector(int index, FieldVector<T> v)
+        throws OutOfRangeException {
         checkIndex(index);
         checkIndex(index + v.getDimension() - 1);
         final int n = v.getDimension();
@@ -417,14 +430,14 @@ public class SparseFieldVector<T extends
     }
 
     /**
-     * Optimized method to subtract SparseRealVectors.
-     *
-     * @param v Vector to subtract.
-     * @return the difference between {@code this} and {@code v}.
-     * @throws DimensionMismatchException
-     * if the dimensions do not match.
+     * Optimized method to compute {@code this} minus {@code v}.
+     * @param v vector to be subtracted
+     * @return {@code this - v}
+     * @throws DimensionMismatchException if {@code v} is not the same size as
+     * {@code this}.
      */
-    public SparseFieldVector<T> subtract(SparseFieldVector<T> v){
+    public SparseFieldVector<T> subtract(SparseFieldVector<T> v)
+        throws DimensionMismatchException {
         checkVectorDimensions(v.getDimension());
         SparseFieldVector<T> res = (SparseFieldVector<T>)copy();
         OpenIntToFieldHashMap<T>.Iterator iter = v.getEntries().iterator();
@@ -441,7 +454,8 @@ public class SparseFieldVector<T extends
     }
 
     /** {@inheritDoc} */
-    public FieldVector<T> subtract(FieldVector<T> v) {
+    public FieldVector<T> subtract(FieldVector<T> v)
+        throws DimensionMismatchException {
         if (v instanceof SparseFieldVector<?>) {
             return subtract((SparseFieldVector<T>)v);
         } else {
@@ -468,9 +482,9 @@ public class SparseFieldVector<T extends
      * Check whether an index is valid.
      *
      * @param index Index to check.
-     * @throws OutOfRangeException if the dimensions do not match.
+     * @throws OutOfRangeException if the index is not valid.
      */
-    private void checkIndex(final int index) {
+    private void checkIndex(final int index) throws OutOfRangeException {
         if (index < 0 || index >= getDimension()) {
             throw new OutOfRangeException(index, 0, getDimension() - 1);
         }
@@ -482,14 +496,15 @@ public class SparseFieldVector<T extends
      * @param n Expected dimension.
      * @throws DimensionMismatchException if the dimensions do not match.
      */
-    protected void checkVectorDimensions(int n) {
+    protected void checkVectorDimensions(int n)
+        throws DimensionMismatchException {
         if (getDimension() != n) {
             throw new DimensionMismatchException(getDimension(), n);
         }
     }
 
     /** {@inheritDoc} */
-    public FieldVector<T> add(FieldVector<T> v) {
+    public FieldVector<T> add(FieldVector<T> v) throws DimensionMismatchException {
         if (v instanceof SparseFieldVector<?>) {
             return add((SparseFieldVector<T>) v);
         } else {