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; }