You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bi...@apache.org on 2009/02/09 05:50:28 UTC
svn commit: r742257 - in /commons/proper/math/trunk/src:
java/org/apache/commons/math/linear/ java/org/apache/commons/math/util/
test/org/apache/commons/math/linear/
Author: billbarker
Date: Mon Feb 9 04:50:27 2009
New Revision: 742257
URL: http://svn.apache.org/viewvc?rev=742257&view=rev
Log:
Mostly completing the methods that don't make sense if using a sparse vector in the first place. Initial implementations for equals on the backing store, but it seems it will need more work (since still have to comment out junit tests).
Making checkVectorDimensions protected instead of public on all RealVector classes.
Modified:
commons/proper/math/trunk/src/java/org/apache/commons/math/linear/RealVectorImpl.java
commons/proper/math/trunk/src/java/org/apache/commons/math/linear/SparseRealVector.java
commons/proper/math/trunk/src/java/org/apache/commons/math/util/OpenIntToDoubleHashMap.java
commons/proper/math/trunk/src/test/org/apache/commons/math/linear/SparseRealVectorTest.java
Modified: commons/proper/math/trunk/src/java/org/apache/commons/math/linear/RealVectorImpl.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/linear/RealVectorImpl.java?rev=742257&r1=742256&r2=742257&view=diff
==============================================================================
--- commons/proper/math/trunk/src/java/org/apache/commons/math/linear/RealVectorImpl.java (original)
+++ commons/proper/math/trunk/src/java/org/apache/commons/math/linear/RealVectorImpl.java Mon Feb 9 04:50:27 2009
@@ -1270,7 +1270,7 @@
* @exception IllegalArgumentException if the vectors do not
* have the same dimension
*/
- public void checkVectorDimensions(RealVector v)
+ protected void checkVectorDimensions(RealVector v)
throws IllegalArgumentException {
checkVectorDimensions(v.getDimension());
}
@@ -1282,7 +1282,7 @@
* @exception IllegalArgumentException if the dimension is
* inconsistent with vector size
*/
- public void checkVectorDimensions(int n)
+ protected void checkVectorDimensions(int n)
throws IllegalArgumentException {
if (data.length != n) {
throw new IllegalArgumentException("vector dimension is " + data.length +
Modified: commons/proper/math/trunk/src/java/org/apache/commons/math/linear/SparseRealVector.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/linear/SparseRealVector.java?rev=742257&r1=742256&r2=742257&view=diff
==============================================================================
--- commons/proper/math/trunk/src/java/org/apache/commons/math/linear/SparseRealVector.java (original)
+++ commons/proper/math/trunk/src/java/org/apache/commons/math/linear/SparseRealVector.java Mon Feb 9 04:50:27 2009
@@ -232,6 +232,7 @@
* @return The sum of <code>this</code> with <code>v</code>
*/
public SparseRealVector add(SparseRealVector v) {
+ checkVectorDimensions(v.getDimension());
SparseRealVector res = (SparseRealVector) copy();
Iterator iter = res.getEntries().iterator();
while (iter.hasNext()) {
@@ -717,10 +718,8 @@
/** {@inheritDoc} */
public RealVector mapCosToSelf() {
- Iterator iter = entries.iterator();
- while (iter.hasNext()) {
- iter.advance();
- entries.put(iter.key(), Math.cos(iter.value()));
+ for(int i=0; i < virtualSize; i++){
+ setEntry(i, Math.cos(getEntry(i)));
}
return this;
}
@@ -732,10 +731,8 @@
/** {@inheritDoc} */
public RealVector mapCoshToSelf() {
- Iterator iter = entries.iterator();
- while (iter.hasNext()) {
- iter.advance();
- entries.put(iter.key(), Math.cosh(iter.value()));
+ for(int i = 0; i < virtualSize; i++){
+ setEntry(i, Math.cosh(getEntry(i)));
}
return this;
}
@@ -1201,7 +1198,7 @@
* @exception IllegalArgumentException
* if the dimension is inconsistent with vector size
*/
- public void checkVectorDimensions(int n) throws IllegalArgumentException {
+ protected void checkVectorDimensions(int n) throws IllegalArgumentException {
if (getDimension() != n) {
throw new IllegalArgumentException("vector dimension is "
+ getDimension() + ", not " + n + " as expected");
@@ -1212,4 +1209,47 @@
public double[] toArray() {
return getData();
}
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((entries == null) ? 0 : entries.hashCode());
+ long temp;
+ temp = Double.doubleToLongBits(epsilon);
+ result = prime * result + (int) (temp ^ (temp >>> 32));
+ result = prime * result + virtualSize;
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ System.out.println("Checking equality of "+obj);
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (!(obj instanceof SparseRealVector))
+ return false;
+ System.out.println("is a sparse vector");
+ SparseRealVector other = (SparseRealVector) obj;
+ if (entries == null) {
+ if (other.entries != null)
+ return false;
+ } else if (!entries.equals(other.entries)){
+ System.out.println("no entries match");
+ return false;
+ }if (Double.doubleToLongBits(epsilon) != Double
+ .doubleToLongBits(other.epsilon))
+ return false;
+ if (virtualSize != other.virtualSize)
+ return false;
+ return true;
+ }
}
Modified: commons/proper/math/trunk/src/java/org/apache/commons/math/util/OpenIntToDoubleHashMap.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/util/OpenIntToDoubleHashMap.java?rev=742257&r1=742256&r2=742257&view=diff
==============================================================================
--- commons/proper/math/trunk/src/java/org/apache/commons/math/util/OpenIntToDoubleHashMap.java (original)
+++ commons/proper/math/trunk/src/java/org/apache/commons/math/util/OpenIntToDoubleHashMap.java Mon Feb 9 04:50:27 2009
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
+import java.util.Arrays;
import java.util.ConcurrentModificationException;
import java.util.NoSuchElementException;
@@ -594,4 +595,61 @@
count = 0;
}
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Arrays.hashCode(keys);
+ result = prime * result + mask;
+ long temp;
+ temp = Double.doubleToLongBits(missingEntries);
+ result = prime * result + (int) (temp ^ (temp >>> 32));
+ result = prime * result + size;
+ result = prime * result + Arrays.hashCode(states);
+ result = prime * result + Arrays.hashCode(values);
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ OpenIntToDoubleHashMap other = (OpenIntToDoubleHashMap) obj;
+ if (!Arrays.equals(keys, other.keys))
+ return false;
+ if (mask != other.mask)
+ return false;
+ if (Double.doubleToLongBits(missingEntries) != Double
+ .doubleToLongBits(other.missingEntries))
+ return false;
+ if (size != other.size)
+ return false;
+ if (!Arrays.equals(states, other.states)){
+ System.out.println("states not match:" );
+ for(byte e : states){
+ System.out.print(e+" ");
+ }
+ System.out.println();
+ for(byte e : other.states){
+ System.out.print(e+" ");
+ }
+ return false;
+ }
+ if (!Arrays.equals(values, other.values)){
+ System.out.println("values don't match");
+ return false;
+ }
+ return true;
+ }
+
}
Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/linear/SparseRealVectorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/linear/SparseRealVectorTest.java?rev=742257&r1=742256&r2=742257&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/org/apache/commons/math/linear/SparseRealVectorTest.java (original)
+++ commons/proper/math/trunk/src/test/org/apache/commons/math/linear/SparseRealVectorTest.java Mon Feb 9 04:50:27 2009
@@ -473,11 +473,6 @@
assertEquals("testData len", 7, v1.getDimension());
assertEquals("testData is 0.0 ", 0.0, v1.getEntry(6));
- /* TODO: make this supported */
- //SparseRealVector v2 = new SparseRealVector(5, 1.23);
- //assertEquals("testData len", 5, v2.getDimension());
- //assertEquals("testData is 1.23 ", 1.23, v2.getEntry(4));
-
SparseRealVector v3 = new SparseRealVector(vec1);
assertEquals("testData len", 3, v3.getDimension());
assertEquals("testData is 2.0 ", 2.0, v3.getEntry(1));
@@ -560,26 +555,10 @@
assertEquals("testData len", 6, v_append_3.getDimension());
assertEquals("testData is ", 4.0, v_append_3.getEntry(3));
- /* TODO: fixme */
- //RealVector v_append_4 = v1.append(v2_t);
- //assertEquals("testData len", 6, v_append_4.getDimension());
- //assertEquals("testData is 4.0 ", 4.0, v_append_4.getEntry(3));
-
- /* TODO: fixme */
- //RealVector v_copy = v1.copy();
- //assertEquals("testData len", 3, v_copy.getDimension());
- //assertNotSame("testData not same object ", v1.data, v_copy.getData());
- /* TODO: fixme */
- //double[] a_double = v1.toArray();
- //assertEquals("testData len", 3, a_double.length);
- //assertNotSame("testData not same object ", v1.data, a_double);
-
-
-// SparseRealVector vout4 = (SparseRealVector) v1.clone();
-// assertEquals("testData len", 3, vout4.getDimension());
-// assertEquals("testData not same object ", v1.data, vout4.data);
-
-
+ RealVector v_append_4 = v1.append(v2_t);
+ assertEquals("testData len", 6, v_append_4.getDimension());
+ assertEquals("testData is 4.0 ", 4.0, v_append_4.getEntry(3));
+
RealVector vout5 = v4.getSubVector(3, 3);
assertEquals("testData len", 3, vout5.getDimension());
assertEquals("testData is 4.0 ", 5.0, vout5.getEntry(1));
@@ -1125,27 +1104,8 @@
// expected behavior
} catch (Exception e) {
fail("wrong exception caught");
- }
-
- /* TODO: fixme */
- //try {
- // v1.checkVectorDimensions(v4);
- // fail("IllegalArgumentException expected");
- //} catch (IllegalArgumentException ex) {
- // expected behavior
- //} catch (Exception e) {
- // fail("wrong exception caught");
- //}
+ }
- /* TODO: fixme */
- //try {
- // v1.checkVectorDimensions(v4_2);
- // fail("IllegalArgumentException expected");
- //} catch (IllegalArgumentException ex) {
- // expected behavior
- // } catch (Exception e) {
- // fail("wrong exception caught");
- //}
}
@@ -1159,16 +1119,16 @@
assertFalse(v.isInfinite());
v.setEntry(0, Double.POSITIVE_INFINITY);
- // TODO: fixme
+ // TODO: why is this test here
//assertFalse(v.isInfinite());
v.setEntry(1, 1);
assertTrue(v.isInfinite());
- v.setEntry(0, 0);
- // TODO: backing store doesn't yet implement equals
+ //TODO: differeciate from resetting to zero
+ //v.setEntry(0, 0);
//assertEquals(v, new SparseRealVector(new double[] { 0, 1, 2 }));
- //assertNotSame(v, new SparseRealVector(new double[] { 0, 1, 2 + Math.ulp(2)}));
- //assertNotSame(v, new SparseRealVector(new double[] { 0, 1, 2, 3 }));
+ assertNotSame(v, new SparseRealVector(new double[] { 0, 1, 2 + Math.ulp(2)}));
+ assertNotSame(v, new SparseRealVector(new double[] { 0, 1, 2, 3 }));
//assertEquals(new SparseRealVector(new double[] { Double.NaN, 1, 2 }).hashCode(),
// new SparseRealVector(new double[] { 0, Double.NaN, 2 }).hashCode());
Re: [math] When are OpenIntToDoubleHashMap instances equal? WAS Re: svn commit: r742257 - in /commons/proper/math/trunk/src: java/org/apache/commons/math/linear/ java/org/apache/commons/math/util/ test/org/apache/commons/math/linear/
Posted by Bill Barker <wb...@wilshire.com>.
Ok, sort of letting eclipse take over. More comments inline.
"Phil Steitz" <ph...@gmail.com> wrote in message
news:49901038.2070009@gmail.com...
> billbarker@apache.org wrote:
>
> Do we need this?
>> + if (mask != other.mask)
>> + return false;
>> .
as the code stands now, unnecessary. The value can't be currently changed.
More than happy to remove the check.
> ...
>
>
> Or this?
>> + if (!Arrays.equals(states, other.states)){
>>
> It would seem reasonable to me that two OpenIntToDoubleHashMaps would be
> equal iff they contain they contain the same entries and have the same
> default (missingEntries). Including the private fields above in equals
> will make it more sensitive than that. Since mask relates to capacity, I
> guess it could make sense to include that in equals comparisons, but
> unless I am misunderstanding how put works, I think that including states
> in the comparison could make two instances unequal if their entries have
> been added in different orders. Do we want this?
>
I'm thinking probably not. I agree with your def of equals for
OpenIntToDoubleHashMap, so will change it.
> Phil
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org
[math] When are OpenIntToDoubleHashMap instances equal? WAS Re:
svn commit: r742257 - in /commons/proper/math/trunk/src: java/org/apache/commons/math/linear/
java/org/apache/commons/math/util/ test/org/apache/commons/math/linear/
Posted by Phil Steitz <ph...@gmail.com>.
billbarker@apache.org wrote:
Do we need this?
> + if (mask != other.mask)
> + return false;
>
...
Or this?
> + if (!Arrays.equals(states, other.states)){
>
It would seem reasonable to me that two OpenIntToDoubleHashMaps would be
equal iff they contain they contain the same entries and have the same
default (missingEntries). Including the private fields above in equals
will make it more sensitive than that. Since mask relates to capacity,
I guess it could make sense to include that in equals comparisons, but
unless I am misunderstanding how put works, I think that including
states in the comparison could make two instances unequal if their
entries have been added in different orders. Do we want this?
Phil
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org