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/11/07 10:37:39 UTC

svn commit: r1032241 - in /mahout/trunk/core/src: main/java/org/apache/mahout/cf/taste/impl/model/ test/java/org/apache/mahout/cf/taste/impl/recommender/

Author: srowen
Date: Sun Nov  7 09:37:39 2010
New Revision: 1032241

URL: http://svn.apache.org/viewvc?rev=1032241&view=rev
Log:
Small fix to test and toString(); add helpful check for bad use of item/user pref array

Modified:
    mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericItemPreferenceArray.java
    mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericUserPreferenceArray.java
    mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/SamplingCandidateItemsStrategyTest.java

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericItemPreferenceArray.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericItemPreferenceArray.java?rev=1032241&r1=1032240&r2=1032241&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericItemPreferenceArray.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericItemPreferenceArray.java Sun Nov  7 09:37:39 2010
@@ -54,14 +54,20 @@ public final class GenericItemPreference
   public GenericItemPreferenceArray(List<Preference> prefs) {
     this(prefs.size());
     int size = prefs.size();
+    long itemID = Long.MIN_VALUE;
     for (int i = 0; i < size; i++) {
       Preference pref = prefs.get(i);
       ids[i] = pref.getUserID();
+      if (i == 0) {
+        itemID = pref.getItemID();
+      } else {
+        if (itemID != pref.getItemID()) {
+          throw new IllegalArgumentException("Not all item IDs are the same");
+        }
+      }
       values[i] = pref.getValue();
     }
-    if (size > 0) {
-      id = prefs.get(0).getItemID();
-    }
+    id = itemID;
   }
   
   /**
@@ -240,6 +246,9 @@ public final class GenericItemPreference
 
   @Override
   public String toString() {
+    if (ids == null || ids.length == 0) {
+      return "GenericItemPreferenceArray[{}]";
+    }
     StringBuilder result = new StringBuilder(20 * ids.length);
     result.append("GenericItemPreferenceArray[itemID:");
     result.append(id);

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericUserPreferenceArray.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericUserPreferenceArray.java?rev=1032241&r1=1032240&r2=1032241&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericUserPreferenceArray.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/GenericUserPreferenceArray.java Sun Nov  7 09:37:39 2010
@@ -27,6 +27,11 @@ import org.apache.mahout.cf.taste.model.
 
 /**
  * <p>
+ * Like {@link GenericItemPreferenceArray} but stores preferences for one user (all user IDs the same) rather
+ * than one item.
+ * </p>
+ *
+ * <p>
  * This implementation maintains two parallel arrays, of user IDs and values. The idea is to save allocating
  * {@link Preference} objects themselves. This saves the overhead of {@link Preference} objects but also
  * duplicating the user ID value.
@@ -55,14 +60,20 @@ public final class GenericUserPreference
   public GenericUserPreferenceArray(List<Preference> prefs) {
     this(prefs.size());
     int size = prefs.size();
+    long userID = Long.MIN_VALUE;
     for (int i = 0; i < size; i++) {
       Preference pref = prefs.get(i);
+      if (i == 0) {
+        userID = pref.getUserID();
+      } else {
+        if (userID != pref.getUserID()) {
+          throw new IllegalArgumentException("Not all user IDs are the same");
+        }
+      }
       ids[i] = pref.getItemID();
       values[i] = pref.getValue();
     }
-    if (size > 0) {
-      id = prefs.get(0).getUserID();
-    }
+    id = userID;
   }
   
   /**
@@ -241,6 +252,9 @@ public final class GenericUserPreference
 
   @Override
   public String toString() {
+    if (ids == null || ids.length == 0) {
+      return "GenericUserPreferenceArray[{}]";
+    }
     StringBuilder result = new StringBuilder(20 * ids.length);
     result.append("GenericUserPreferenceArray[userID:");
     result.append(id);

Modified: mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/SamplingCandidateItemsStrategyTest.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/SamplingCandidateItemsStrategyTest.java?rev=1032241&r1=1032240&r2=1032241&view=diff
==============================================================================
--- mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/SamplingCandidateItemsStrategyTest.java (original)
+++ mahout/trunk/core/src/test/java/org/apache/mahout/cf/taste/impl/recommender/SamplingCandidateItemsStrategyTest.java Sun Nov  7 09:37:39 2010
@@ -48,8 +48,8 @@ public final class SamplingCandidateItem
     prefsOfUser456.add(new GenericPreference(456L, 2L, 1.0f));
 
     List<Preference> prefsOfUser789 = new ArrayList<Preference>();
-    prefsOfUser456.add(new GenericPreference(789L, 1L, 0.5f));
-    prefsOfUser456.add(new GenericPreference(789L, 3L, 1.0f));
+    prefsOfUser789.add(new GenericPreference(789L, 1L, 0.5f));
+    prefsOfUser789.add(new GenericPreference(789L, 3L, 1.0f));
 
     FastByIDMap<PreferenceArray> userData = new FastByIDMap<PreferenceArray>();
     userData.put(123L, new GenericUserPreferenceArray(prefsOfUser123));