You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2010/03/18 19:15:16 UTC

svn commit: r924930 - in /lucene/mahout/trunk/core/src: main/java/org/apache/mahout/cf/taste/impl/model/file/ main/java/org/apache/mahout/cf/taste/impl/similarity/ main/java/org/apache/mahout/cf/taste/impl/transforms/ main/java/org/apache/mahout/common...

Author: srowen
Date: Thu Mar 18 18:15:16 2010
New Revision: 924930

URL: http://svn.apache.org/viewvc?rev=924930&view=rev
Log:
On the subject of recent notes about MutableLong et al, why not standardize on this for cases where we need a mutable object primitive

Modified:
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/common/cache/LFUCache.java
    lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModelTest.java
    lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommenderTest.java
    lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/MockRecommender.java

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java?rev=924930&r1=924929&r2=924930&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java Thu Mar 18 18:15:16 2010
@@ -26,9 +26,9 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.locks.ReentrantLock;
 
+import org.apache.commons.lang.mutable.MutableInt;
 import org.apache.mahout.cf.taste.common.Refreshable;
 import org.apache.mahout.cf.taste.common.TasteException;
 import org.apache.mahout.cf.taste.impl.common.FastByIDMap;
@@ -313,18 +313,17 @@ public class FileDataModel extends Abstr
                              FastByIDMap<?> data,
                              boolean fromPriorData) {
     log.info("Reading file info...");
-    AtomicInteger count = new AtomicInteger();
+    int count = 0;
     while (dataOrUpdateFileIterator.hasNext()) {
       String line = dataOrUpdateFileIterator.next();
       if (line.length() > 0) {
         processLine(line, data, fromPriorData);
-        int currentCount = count.incrementAndGet();
-        if (currentCount % 1000000 == 0) {
-          log.info("Processed {} lines", currentCount);
+        if (++count % 1000000 == 0) {
+          log.info("Processed {} lines", count);
         }
       }
     }
-    log.info("Read lines: {}", count.get());
+    log.info("Read lines: {}", count);
   }
   
   /**
@@ -492,18 +491,17 @@ public class FileDataModel extends Abstr
   
   protected void processFileWithoutID(FileLineIterator dataOrUpdateFileIterator, FastByIDMap<FastIDSet> data) {
     log.info("Reading file info...");
-    AtomicInteger count = new AtomicInteger();
+    int count = 0;
     while (dataOrUpdateFileIterator.hasNext()) {
       String line = dataOrUpdateFileIterator.next();
       if (line.length() > 0) {
         processLineWithoutID(line, data);
-        int currentCount = count.incrementAndGet();
-        if (currentCount % 100000 == 0) {
-          log.info("Processed {} lines", currentCount);
+        if (++count % 100000 == 0) {
+          log.info("Processed {} lines", count);
         }
       }
     }
-    log.info("Read lines: {}", count.get());
+    log.info("Read lines: {}", count);
   }
   
   protected void processLineWithoutID(String line, FastByIDMap<FastIDSet> data) {

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java?rev=924930&r1=924929&r2=924930&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java Thu Mar 18 18:15:16 2010
@@ -59,9 +59,10 @@ public final class LogLikelihoodSimilari
       return Double.NaN;
     }
     int numItems = dataModel.getNumItems();
-    double logLikelihood = twoLogLambda(intersectionSize, prefs1Size
-                                                                                  - intersectionSize,
-      prefs2Size, numItems - prefs2Size);
+    double logLikelihood = twoLogLambda(intersectionSize,
+                                        prefs1Size - intersectionSize,
+                                        prefs2Size,
+                                        numItems - prefs2Size);
     return 1.0 - 1.0 / (1.0 + logLikelihood);
   }
   
@@ -74,9 +75,10 @@ public final class LogLikelihoodSimilari
     int preferring1 = dataModel.getNumUsersWithPreferenceFor(itemID1);
     int preferring2 = dataModel.getNumUsersWithPreferenceFor(itemID2);
     int numUsers = dataModel.getNumUsers();
-    double logLikelihood = twoLogLambda(preferring1and2, preferring1
-                                                                                 - preferring1and2,
-      preferring2, numUsers - preferring2);
+    double logLikelihood = twoLogLambda(preferring1and2,
+                                        preferring1 - preferring1and2,
+                                        preferring2, 
+                                        numUsers - preferring2);
     return 1.0 - 1.0 / (1.0 + logLikelihood);
   }
   

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java?rev=924930&r1=924929&r2=924930&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java Thu Mar 18 18:15:16 2010
@@ -20,7 +20,6 @@ package org.apache.mahout.cf.taste.impl.
 import java.util.Collection;
 import java.util.Map;
 import java.util.concurrent.Callable;
-import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.mahout.cf.taste.common.Refreshable;
 import org.apache.mahout.cf.taste.common.TasteException;
@@ -55,7 +54,7 @@ public final class InverseUserFrequency 
   private final DataModel dataModel;
   private final RefreshHelper refreshHelper;
   private final double logBase;
-  private final AtomicReference<FastByIDMap<Double>> iufFactors;
+  private FastByIDMap<Double> iufFactors;
   
   /**
    * <p>
@@ -78,7 +77,7 @@ public final class InverseUserFrequency 
     }
     this.dataModel = dataModel;
     this.logBase = logBase;
-    this.iufFactors = new AtomicReference<FastByIDMap<Double>>(new FastByIDMap<Double>());
+    this.iufFactors = new FastByIDMap<Double>();
     this.refreshHelper = new RefreshHelper(new Callable<Object>() {
       @Override
       public Object call() throws TasteException {
@@ -97,7 +96,7 @@ public final class InverseUserFrequency 
   
   @Override
   public float getTransformedValue(Preference pref) {
-    Double factor = iufFactors.get().get(pref.getItemID());
+    Double factor = iufFactors.get(pref.getItemID());
     if (factor != null) {
       return (float) (pref.getValue() * factor);
     }
@@ -127,7 +126,7 @@ public final class InverseUserFrequency 
       newIufFactors.put(entry.getKey(), Math.log((double) numUsers / (double) entry.getValue()[0])
                                         / logFactor);
     }
-    iufFactors.set(newIufFactors);
+    iufFactors = newIufFactors;
   }
   
   @Override

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/common/cache/LFUCache.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/common/cache/LFUCache.java?rev=924930&r1=924929&r2=924930&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/common/cache/LFUCache.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/common/cache/LFUCache.java Thu Mar 18 18:15:16 2010
@@ -25,15 +25,15 @@ import java.util.Map;
 import java.util.Set;
 import java.util.SortedMap;
 import java.util.TreeMap;
-import java.util.concurrent.atomic.AtomicLong;
 
+import org.apache.commons.lang.mutable.MutableLong;
 import org.apache.mahout.common.Pair;
 
 public class LFUCache<K,V> implements Cache<K,V> {
   
   private final SortedMap<Long,Set<K>> evictionMap;
   
-  private final Map<K,Pair<V,AtomicLong>> dataMap;
+  private final Map<K,Pair<V, MutableLong>> dataMap;
   
   private final int capacity;
   
@@ -43,7 +43,7 @@ public class LFUCache<K,V> implements Ca
     this.capacity = capacity;
     
     evictionMap = new TreeMap<Long,Set<K>>();
-    dataMap = new HashMap<K,Pair<V,AtomicLong>>(capacity); 
+    dataMap = new HashMap<K,Pair<V,MutableLong>>(capacity);
   }
   
   @Override
@@ -57,13 +57,14 @@ public class LFUCache<K,V> implements Ca
   
   @Override
   public V get(K key) {
-    Pair<V,AtomicLong> data = dataMap.get(key);
+    Pair<V,MutableLong> data = dataMap.get(key);
     if (data == null) {
       return null;
     } else {
       V value = data.getFirst();
-      AtomicLong count = data.getSecond();
-      long oldCount = count.getAndIncrement();
+      MutableLong count = data.getSecond();
+      long oldCount = count.longValue();
+      count.increment();
       incrementHit(key, oldCount);
       return value;
     }
@@ -71,7 +72,7 @@ public class LFUCache<K,V> implements Ca
   }
   
   public V quickGet(K key) {
-    Pair<V,AtomicLong> data = dataMap.get(key);
+    Pair<V,MutableLong> data = dataMap.get(key);
     if (data == null) {
       return null;
     } else {
@@ -108,8 +109,8 @@ public class LFUCache<K,V> implements Ca
     {
       removeLeastFrequent();
     }
-    AtomicLong count = new AtomicLong(1L);
-    Pair<V,AtomicLong> data = new Pair<V,AtomicLong>(value, count);
+    MutableLong count = new MutableLong(1L);
+    Pair<V,MutableLong> data = new Pair<V,MutableLong>(value, count);
     dataMap.put(key, data);
     
     Long countKey = 1L;

Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModelTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModelTest.java?rev=924930&r1=924929&r2=924930&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModelTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModelTest.java Thu Mar 18 18:15:16 2010
@@ -17,6 +17,7 @@
 
 package org.apache.mahout.cf.taste.impl.model.file;
 
+import org.apache.commons.lang.mutable.MutableBoolean;
 import org.apache.mahout.cf.taste.common.TasteException;
 import org.apache.mahout.cf.taste.impl.TasteTestCase;
 import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
@@ -37,7 +38,6 @@ import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.nio.charset.Charset;
 import java.util.NoSuchElementException;
-import java.util.concurrent.atomic.AtomicBoolean;
 
 /** <p>Tests {@link FileDataModel}.</p> */
 public final class FileDataModelTest extends TasteTestCase {
@@ -169,13 +169,13 @@ public final class FileDataModelTest ext
   }
 
   public void testRefresh() throws Exception {
-    final AtomicBoolean initialized = new AtomicBoolean(false);
+    final MutableBoolean initialized = new MutableBoolean(false);
     Runnable initializer = new Runnable() {
       @Override
       public void run() {
         try {
           model.getNumUsers();
-          initialized.set(true);
+          initialized.setValue(true);
         } catch (TasteException te) {
           // oops
         }
@@ -184,7 +184,7 @@ public final class FileDataModelTest ext
     new Thread(initializer).start();
     Thread.sleep(1000L); // wait a second for thread to start and call getNumUsers()
     model.getNumUsers(); // should block
-    assertTrue(initialized.get());
+    assertTrue(initialized.booleanValue());
     assertEquals(4, model.getNumUsers());
   }
 

Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommenderTest.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommenderTest.java?rev=924930&r1=924929&r2=924930&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommenderTest.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommenderTest.java Thu Mar 18 18:15:16 2010
@@ -17,61 +17,60 @@
 
 package org.apache.mahout.cf.taste.impl.recommender;
 
+import org.apache.commons.lang.mutable.MutableInt;
 import org.apache.mahout.cf.taste.impl.TasteTestCase;
 import org.apache.mahout.cf.taste.recommender.IDRescorer;
 import org.apache.mahout.cf.taste.recommender.Recommender;
 
-import java.util.concurrent.atomic.AtomicInteger;
-
 /** <p>Tests {@link CachingRecommender}.</p> */
 public final class CachingRecommenderTest extends TasteTestCase {
 
   public void testRecommender() throws Exception {
-    AtomicInteger recommendCount = new AtomicInteger();
+    MutableInt recommendCount = new MutableInt();
     Recommender mockRecommender = new MockRecommender(recommendCount);
 
     Recommender cachingRecommender = new CachingRecommender(mockRecommender);
     cachingRecommender.recommend(1, 1);
-    assertEquals(1, recommendCount.get());
+    assertEquals(1, recommendCount.intValue());
     cachingRecommender.recommend(2, 1);
-    assertEquals(2, recommendCount.get());
+    assertEquals(2, recommendCount.intValue());
     cachingRecommender.recommend(1, 1);
-    assertEquals(2, recommendCount.get());
+    assertEquals(2, recommendCount.intValue());
     cachingRecommender.recommend(2, 1);
-    assertEquals(2, recommendCount.get());
+    assertEquals(2, recommendCount.intValue());
     cachingRecommender.refresh(null);
     cachingRecommender.recommend(1, 1);
-    assertEquals(3, recommendCount.get());
+    assertEquals(3, recommendCount.intValue());
     cachingRecommender.recommend(2, 1);
-    assertEquals(4, recommendCount.get());
+    assertEquals(4, recommendCount.intValue());
     cachingRecommender.recommend(3, 1);
-    assertEquals(5, recommendCount.get());
+    assertEquals(5, recommendCount.intValue());
 
     // Results from this recommend() method can be cached...
     IDRescorer rescorer = NullRescorer.getItemInstance();
     cachingRecommender.refresh(null);
     cachingRecommender.recommend(1, 1, rescorer);
-    assertEquals(6, recommendCount.get());
+    assertEquals(6, recommendCount.intValue());
     cachingRecommender.recommend(2, 1, rescorer);
-    assertEquals(7, recommendCount.get());
+    assertEquals(7, recommendCount.intValue());
     cachingRecommender.recommend(1, 1, rescorer);
-    assertEquals(7, recommendCount.get());
+    assertEquals(7, recommendCount.intValue());
     cachingRecommender.recommend(2, 1, rescorer);
-    assertEquals(7, recommendCount.get());
+    assertEquals(7, recommendCount.intValue());
 
     // until you switch Rescorers
     cachingRecommender.recommend(1, 1, null);
-    assertEquals(8, recommendCount.get());
+    assertEquals(8, recommendCount.intValue());
     cachingRecommender.recommend(2, 1, null);
-    assertEquals(9, recommendCount.get());
+    assertEquals(9, recommendCount.intValue());
 
     cachingRecommender.refresh(null);
     cachingRecommender.estimatePreference(1, 1);
-    assertEquals(10, recommendCount.get());
+    assertEquals(10, recommendCount.intValue());
     cachingRecommender.estimatePreference(1, 2);
-    assertEquals(11, recommendCount.get());
+    assertEquals(11, recommendCount.intValue());
     cachingRecommender.estimatePreference(1, 2);
-    assertEquals(11, recommendCount.get());
+    assertEquals(11, recommendCount.intValue());
   }
 
 }

Modified: lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/MockRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/MockRecommender.java?rev=924930&r1=924929&r2=924930&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/MockRecommender.java (original)
+++ lucene/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/MockRecommender.java Thu Mar 18 18:15:16 2010
@@ -17,6 +17,7 @@
 
 package org.apache.mahout.cf.taste.impl.recommender;
 
+import org.apache.commons.lang.mutable.MutableInt;
 import org.apache.mahout.cf.taste.common.Refreshable;
 import org.apache.mahout.cf.taste.impl.TasteTestCase;
 import org.apache.mahout.cf.taste.model.DataModel;
@@ -27,20 +28,19 @@ import org.apache.mahout.cf.taste.recomm
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
 
 
 final class MockRecommender implements Recommender {
 
-  private final AtomicInteger recommendCount;
+  private final MutableInt recommendCount;
 
-  MockRecommender(AtomicInteger recommendCount) {
+  MockRecommender(MutableInt recommendCount) {
     this.recommendCount = recommendCount;
   }
 
   @Override
   public List<RecommendedItem> recommend(long userID, int howMany) {
-    recommendCount.incrementAndGet();
+    recommendCount.increment();
     return Collections.<RecommendedItem>singletonList(
         new GenericRecommendedItem(1, 1.0f));
   }
@@ -52,7 +52,7 @@ final class MockRecommender implements R
 
   @Override
   public float estimatePreference(long userID, long itemID) {
-    recommendCount.incrementAndGet();
+    recommendCount.increment();
     return 0.0f;
   }