Author: smarthi
Date: Wed May 29 05:47:05 2013
New Revision: 1487279

URL: http://svn.apache.org/r1487279
Log:
MAHOUT-1232: VectorHelper.topEntries() throws a NPE when number of NonZero 
elements in vector < maxEntries

Modified:
    mahout/trunk/CHANGELOG
    
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorDumper.java
    
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorHelper.java
    
mahout/trunk/integration/src/test/java/org/apache/mahout/utils/vectors/VectorHelperTest.java

Modified: mahout/trunk/CHANGELOG
URL: 
http://svn.apache.org/viewvc/mahout/trunk/CHANGELOG?rev=1487279&r1=1487278&r2=1487279&view=diff
==============================================================================
--- mahout/trunk/CHANGELOG (original)
+++ mahout/trunk/CHANGELOG Wed May 29 05:47:05 2013
@@ -2,6 +2,8 @@ Mahout Change Log
 
 Release 0.8 - unreleased
 
+  MAHOUT-1232: VectorHelper.topEntries() throws a NPE when number of NonZero 
elements in vector < maxEntries (smarthi)
+
   MAHOUT-1229: Conf directory content from Mahout distribution archives cannot 
be unpacked (Stevo Slavic via smarthi)
   
   MAHOUT-1213: SSVD job doesn't clean it's temp dir, and fails when seeing it 
again (smarthi)

Modified: 
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorDumper.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorDumper.java?rev=1487279&r1=1487278&r2=1487279&view=diff
==============================================================================
--- 
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorDumper.java
 (original)
+++ 
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorDumper.java
 Wed May 29 05:47:05 2013
@@ -251,7 +251,7 @@ public final class VectorDumper extends 
       writer.flush();
     } finally {
       if (shouldClose) {
-        Closeables.closeQuietly(writer);
+        Closeables.close(writer, true);
       }
     }
 

Modified: 
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorHelper.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorHelper.java?rev=1487279&r1=1487278&r2=1487279&view=diff
==============================================================================
--- 
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorHelper.java
 (original)
+++ 
mahout/trunk/integration/src/main/java/org/apache/mahout/utils/vectors/VectorHelper.java
 Wed May 29 05:47:05 2013
@@ -19,6 +19,7 @@ package org.apache.mahout.utils.vectors;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Collections2;
+import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
@@ -79,6 +80,12 @@ public final class VectorHelper {
   }
 
   public static List<Pair<Integer, Double>> topEntries(Vector vector, int 
maxEntries) {
+    // Get the size of nonZero elements in the input vector
+    int sizeOfNonZeroElementsInVector = Iterables.size(vector.nonZeroes());
+    // If the sizeOfNonZeroElementsInVector < maxEntries then set maxEntries 
to sizeOfNonZeroElementsInVector
+    // else the call to queue.pop() returns a Pair(null, null) and the 
subsequent
+    // call to pair.getFirst() throws a NullPointerException
+    maxEntries = (sizeOfNonZeroElementsInVector < maxEntries) ? 
sizeOfNonZeroElementsInVector : maxEntries;
     PriorityQueue<Pair<Integer, Double>> queue = new TDoublePQ<Integer>(-1, 
maxEntries);
     for (Element e : vector.nonZeroes()) {
       queue.insertWithOverflow(Pair.of(e.index(), e.get()));

Modified: 
mahout/trunk/integration/src/test/java/org/apache/mahout/utils/vectors/VectorHelperTest.java
URL: 
http://svn.apache.org/viewvc/mahout/trunk/integration/src/test/java/org/apache/mahout/utils/vectors/VectorHelperTest.java?rev=1487279&r1=1487278&r2=1487279&view=diff
==============================================================================
--- 
mahout/trunk/integration/src/test/java/org/apache/mahout/utils/vectors/VectorHelperTest.java
 (original)
+++ 
mahout/trunk/integration/src/test/java/org/apache/mahout/utils/vectors/VectorHelperTest.java
 Wed May 29 05:47:05 2013
@@ -17,6 +17,7 @@
 
 package org.apache.mahout.utils.vectors;
 
+import com.google.common.collect.Iterables;
 import org.apache.mahout.math.SequentialAccessSparseVector;
 import org.apache.mahout.math.Vector;
 import org.apache.mahout.utils.MahoutTestCase;
@@ -51,4 +52,22 @@ public final class VectorHelperTest exte
         VectorHelper.vectorToJson(v, dictionary, 2, false));
   }
 
+  @Test
+  public void testTopEntries() throws Exception {
+    Vector v = new SequentialAccessSparseVector(10);
+    v.set(2, 3.1);
+    v.set(4, 1.0);
+    v.set(6, 8.1);
+    v.set(7, -100);
+    v.set(9, 12.2);
+    v.set(1, 0.0);
+    v.set(3, 0.0);
+    v.set(8, 2.7);
+    assertEquals(6, VectorHelper.topEntries(v, 6).size());
+    // when sizeOfNonZeroElementsInVector < maxEntries
+    assertTrue(VectorHelper.topEntries(v, 9).size() < 9);
+    // when sizeOfNonZeroElementsInVector > maxEntries
+    assertTrue(VectorHelper.topEntries(v, 5).size() < 
Iterables.size(v.nonZeroes()));
+  }
+
 }


Reply via email to