MATH-854: fill the "throws" clause of ArrayFieldVector.

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@1383052 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Sebastien Brisard 2012-09-10 19:05:54 +00:00
parent a70cb1668e
commit 5998035a9f
1 changed files with 95 additions and 64 deletions

View File

@ -47,7 +47,7 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
/**
* Build a 0-length vector.
* Zero-length vectors may be used to initialized construction of vectors
* Zero-length vectors may be used to initialize construction of vectors
* by data gathering. We start with zero-length and use either the {@link
* #ArrayFieldVector(ArrayFieldVector, ArrayFieldVector)} constructor
* or one of the {@code append} methods ({@link #add(FieldVector)} or
@ -94,7 +94,8 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* @throws ZeroException if {@code d} is empty.
* @see #ArrayFieldVector(Field, FieldElement[])
*/
public ArrayFieldVector(T[] d) {
public ArrayFieldVector(T[] d)
throws NullArgumentException, ZeroException {
if (d == null) {
throw new NullArgumentException();
}
@ -114,7 +115,8 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* @throws NullArgumentException if {@code d} is {@code null}.
* @see #ArrayFieldVector(FieldElement[])
*/
public ArrayFieldVector(Field<T> field, T[] d) {
public ArrayFieldVector(Field<T> field, T[] d)
throws NullArgumentException {
if (d == null) {
throw new NullArgumentException();
}
@ -143,7 +145,8 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* @see #ArrayFieldVector(FieldElement[])
* @see #ArrayFieldVector(Field, FieldElement[], boolean)
*/
public ArrayFieldVector(T[] d, boolean copyArray) {
public ArrayFieldVector(T[] d, boolean copyArray)
throws NullArgumentException, ZeroException {
if (d == null) {
throw new NullArgumentException();
}
@ -151,7 +154,7 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
throw new ZeroException(LocalizedFormats.VECTOR_MUST_HAVE_AT_LEAST_ONE_ELEMENT);
}
field = d[0].getField();
data = copyArray ? d.clone() : d;
data = copyArray ? d.clone() : d;
}
/**
@ -169,7 +172,8 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* @throws NullArgumentException if {@code d} is {@code null}.
* @see #ArrayFieldVector(FieldElement[], boolean)
*/
public ArrayFieldVector(Field<T> field, T[] d, boolean copyArray) {
public ArrayFieldVector(Field<T> field, T[] d, boolean copyArray)
throws NullArgumentException {
if (d == null) {
throw new NullArgumentException();
}
@ -187,7 +191,8 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* @throws NumberIsTooLargeException if the size of {@code d} is less
* than {@code pos + size}.
*/
public ArrayFieldVector(T[] d, int pos, int size) {
public ArrayFieldVector(T[] d, int pos, int size)
throws NullArgumentException, NumberIsTooLargeException {
if (d == null) {
throw new NullArgumentException();
}
@ -210,7 +215,8 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* @throws NumberIsTooLargeException if the size of {@code d} is less
* than {@code pos + size}.
*/
public ArrayFieldVector(Field<T> field, T[] d, int pos, int size) {
public ArrayFieldVector(Field<T> field, T[] d, int pos, int size)
throws NullArgumentException, NumberIsTooLargeException {
if (d == null) {
throw new NullArgumentException();
}
@ -228,7 +234,8 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* @param v Vector to copy.
* @throws NullArgumentException if {@code v} is {@code null}.
*/
public ArrayFieldVector(FieldVector<T> v) {
public ArrayFieldVector(FieldVector<T> v)
throws NullArgumentException {
if (v == null) {
throw new NullArgumentException();
}
@ -245,7 +252,8 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* @param v Vector to copy.
* @throws NullArgumentException if {@code v} is {@code null}.
*/
public ArrayFieldVector(ArrayFieldVector<T> v) {
public ArrayFieldVector(ArrayFieldVector<T> v)
throws NullArgumentException {
if (v == null) {
throw new NullArgumentException();
}
@ -261,7 +269,8 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* a shallow copy
* @throws NullArgumentException if {@code v} is {@code null}.
*/
public ArrayFieldVector(ArrayFieldVector<T> v, boolean deep) {
public ArrayFieldVector(ArrayFieldVector<T> v, boolean deep)
throws NullArgumentException {
if (v == null) {
throw new NullArgumentException();
}
@ -277,9 +286,9 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* @throws NullArgumentException if {@code v1} or {@code v2} is
* {@code null}.
*/
public ArrayFieldVector(ArrayFieldVector<T> v1, ArrayFieldVector<T> v2) {
if (v1 == null ||
v2 == null) {
public ArrayFieldVector(ArrayFieldVector<T> v1, ArrayFieldVector<T> v2)
throws NullArgumentException {
if (v1 == null || v2 == null) {
throw new NullArgumentException();
}
field = v1.getField();
@ -296,9 +305,9 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* @throws NullArgumentException if {@code v1} or {@code v2} is
* {@code null}.
*/
public ArrayFieldVector(ArrayFieldVector<T> v1, T[] v2) {
if (v1 == null ||
v2 == null) {
public ArrayFieldVector(ArrayFieldVector<T> v1, T[] v2)
throws NullArgumentException {
if (v1 == null || v2 == null) {
throw new NullArgumentException();
}
field = v1.getField();
@ -315,9 +324,9 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* @throws NullArgumentException if {@code v1} or {@code v2} is
* {@code null}.
*/
public ArrayFieldVector(T[] v1, ArrayFieldVector<T> v2) {
if (v1 == null ||
v2 == null) {
public ArrayFieldVector(T[] v1, ArrayFieldVector<T> v2)
throws NullArgumentException {
if (v1 == null || v2 == null) {
throw new NullArgumentException();
}
field = v2.getField();
@ -341,9 +350,9 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* @throws ZeroException if both arrays are empty.
* @see #ArrayFieldVector(Field, FieldElement[], FieldElement[])
*/
public ArrayFieldVector(T[] v1, T[] v2) {
if (v1 == null ||
v2 == null) {
public ArrayFieldVector(T[] v1, T[] v2)
throws NullArgumentException, ZeroException {
if (v1 == null || v2 == null) {
throw new NullArgumentException();
}
if (v1.length + v2.length == 0) {
@ -366,7 +375,11 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* @throws ZeroException if both arrays are empty.
* @see #ArrayFieldVector(FieldElement[], FieldElement[])
*/
public ArrayFieldVector(Field<T> field, T[] v1, T[] v2) {
public ArrayFieldVector(Field<T> field, T[] v1, T[] v2)
throws NullArgumentException, ZeroException {
if (v1 == null || v2 == null) {
throw new NullArgumentException();
}
if (v1.length + v2.length == 0) {
throw new ZeroException(LocalizedFormats.VECTOR_MUST_HAVE_AT_LEAST_ONE_ELEMENT);
}
@ -398,7 +411,8 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
}
/** {@inheritDoc} */
public FieldVector<T> add(FieldVector<T> v) {
public FieldVector<T> add(FieldVector<T> v)
throws DimensionMismatchException {
try {
return add((ArrayFieldVector<T>) v);
} catch (ClassCastException cce) {
@ -412,12 +426,14 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
}
/**
* Compute the sum of this and v.
* Compute the sum of {@code this} and {@code v}.
* @param v vector to be added
* @return this + v
* @throws IllegalArgumentException if v is not the same size as this
* @return {@code this + v}
* @throws DimensionMismatchException if {@code v} is not the same size as
* {@code this}
*/
public ArrayFieldVector<T> add(ArrayFieldVector<T> v) {
public ArrayFieldVector<T> add(ArrayFieldVector<T> v)
throws DimensionMismatchException {
checkVectorDimensions(v.data.length);
T[] out = buildArray(data.length);
for (int i = 0; i < data.length; i++) {
@ -427,7 +443,8 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
}
/** {@inheritDoc} */
public FieldVector<T> subtract(FieldVector<T> v) {
public FieldVector<T> subtract(FieldVector<T> v)
throws DimensionMismatchException {
try {
return subtract((ArrayFieldVector<T>) v);
} catch (ClassCastException cce) {
@ -441,12 +458,14 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
}
/**
* Compute this minus v.
* Compute {@code this} minus {@code v}.
* @param v vector to be subtracted
* @return this + v
* @throws IllegalArgumentException if v is not the same size as this
* @return {@code this - v}
* @throws DimensionMismatchException if {@code v} is not the same size as
* {@code this}
*/
public ArrayFieldVector<T> subtract(ArrayFieldVector<T> v) {
public ArrayFieldVector<T> subtract(ArrayFieldVector<T> v)
throws DimensionMismatchException {
checkVectorDimensions(v.data.length);
T[] out = buildArray(data.length);
for (int i = 0; i < data.length; i++) {
@ -543,7 +562,8 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
}
/** {@inheritDoc} */
public FieldVector<T> ebeMultiply(FieldVector<T> v) {
public FieldVector<T> ebeMultiply(FieldVector<T> v)
throws DimensionMismatchException {
try {
return ebeMultiply((ArrayFieldVector<T>) v);
} catch (ClassCastException cce) {
@ -559,10 +579,12 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
/**
* Element-by-element multiplication.
* @param v vector by which instance elements must be multiplied
* @return a vector containing this[i] * v[i] for all i
* @exception IllegalArgumentException if v is not the same size as this
* @return a vector containing {@code this[i] * v[i]} for all {@code i}
* @throws DimensionMismatchException if {@code v} is not the same size as
* {@code this}
*/
public ArrayFieldVector<T> ebeMultiply(ArrayFieldVector<T> v) {
public ArrayFieldVector<T> ebeMultiply(ArrayFieldVector<T> v)
throws DimensionMismatchException {
checkVectorDimensions(v.data.length);
T[] out = buildArray(data.length);
for (int i = 0; i < data.length; i++) {
@ -572,7 +594,8 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
}
/** {@inheritDoc} */
public FieldVector<T> ebeDivide(FieldVector<T> v) {
public FieldVector<T> ebeDivide(FieldVector<T> v)
throws DimensionMismatchException {
try {
return ebeDivide((ArrayFieldVector<T>) v);
} catch (ClassCastException cce) {
@ -588,10 +611,12 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
/**
* Element-by-element division.
* @param v vector by which instance elements must be divided
* @return a vector containing this[i] / v[i] for all i
* @throws IllegalArgumentException if v is not the same size as this
* @return a vector containing {@code this[i] / v[i]} for all {@code i}
* @throws DimensionMismatchException if {@code v} is not the same size as
* {@code this}
*/
public ArrayFieldVector<T> ebeDivide(ArrayFieldVector<T> v) {
public ArrayFieldVector<T> ebeDivide(ArrayFieldVector<T> v)
throws DimensionMismatchException {
checkVectorDimensions(v.data.length);
T[] out = buildArray(data.length);
for (int i = 0; i < data.length; i++) {
@ -615,7 +640,8 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
}
/** {@inheritDoc} */
public T dotProduct(FieldVector<T> v) {
public T dotProduct(FieldVector<T> v)
throws DimensionMismatchException {
try {
return dotProduct((ArrayFieldVector<T>) v);
} catch (ClassCastException cce) {
@ -631,10 +657,12 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
/**
* Compute the dot product.
* @param v vector with which dot product should be computed
* @return the scalar dot product between instance and v
* @exception IllegalArgumentException if v is not the same size as this
* @return the scalar dot product of {@code this} and {@code v}
* @throws DimensionMismatchException if {@code v} is not the same size as
* {@code this}
*/
public T dotProduct(ArrayFieldVector<T> v) {
public T dotProduct(ArrayFieldVector<T> v)
throws DimensionMismatchException {
checkVectorDimensions(v.data.length);
T dot = field.getZero();
for (int i = 0; i < data.length; i++) {
@ -644,16 +672,19 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
}
/** {@inheritDoc} */
public FieldVector<T> projection(FieldVector<T> v) {
public FieldVector<T> projection(FieldVector<T> v)
throws DimensionMismatchException {
return v.mapMultiply(dotProduct(v).divide(v.dotProduct(v)));
}
/** Find the orthogonal projection of this vector onto another vector.
* @param v vector onto which instance must be projected
* @return projection of the instance onto v
* @throws IllegalArgumentException if v is not the same size as this
/** Find the orthogonal projection of this vector onto another vector.
* @param v vector onto which {@code this} must be projected
* @return projection of {@code this} onto {@code v}
* @throws DimensionMismatchException if {@code v} is not the same size as
* {@code this}
*/
public ArrayFieldVector<T> projection(ArrayFieldVector<T> v) {
public ArrayFieldVector<T> projection(ArrayFieldVector<T> v)
throws DimensionMismatchException {
return (ArrayFieldVector<T>) v.mapMultiply(dotProduct(v).divide(v.dotProduct(v)));
}
@ -677,8 +708,7 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
/**
* Compute the outer product.
* @param v vector with which outer product should be computed
* @return the square matrix outer product between instance and v
* @exception IllegalArgumentException if v is not the same size as this
* @return the matrix outer product between instance and v
*/
public FieldMatrix<T> outerProduct(ArrayFieldVector<T> v) {
final int m = data.length;
@ -770,10 +800,9 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
*
* @param index index of first element to be set.
* @param v vector containing the values to set.
* @throws OutOfRangeException if the index is
* inconsistent with vector size
* @throws OutOfRangeException if the index is invalid.
*/
public void set(int index, ArrayFieldVector<T> v) {
public void set(int index, ArrayFieldVector<T> v) throws OutOfRangeException {
try {
System.arraycopy(v.data, 0, data, index, v.data.length);
} catch (IndexOutOfBoundsException e) {
@ -795,10 +824,11 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
/**
* Check if instance and specified vectors have the same dimension.
* @param v vector to compare instance with
* @exception IllegalArgumentException if the vectors do not
* have the same dimension
* @exception DimensionMismatchException if the vectors do not
* have the same dimensions
*/
protected void checkVectorDimensions(FieldVector<T> v) {
protected void checkVectorDimensions(FieldVector<T> v)
throws DimensionMismatchException {
checkVectorDimensions(v.getDimension());
}
@ -806,10 +836,11 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* Check if instance dimension is equal to some expected value.
*
* @param n Expected dimension.
* @throws OutOfRangeException if the dimension is
* inconsistent with this vector size.
* @throws DimensionMismatchException if the dimension is not equal to the
* size of {@code this} vector.
*/
protected void checkVectorDimensions(int n) {
protected void checkVectorDimensions(int n)
throws DimensionMismatchException {
if (data.length != n) {
throw new DimensionMismatchException(data.length, n);
}
@ -870,7 +901,7 @@ public class ArrayFieldVector<T extends FieldElement<T>> implements FieldVector<
* @param index Index to check.
* @exception 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(LocalizedFormats.INDEX,
index, 0, getDimension() - 1);