Return-Path: Delivered-To: apmail-lucene-mahout-commits-archive@minotaur.apache.org Received: (qmail 74551 invoked from network); 28 Apr 2010 04:36:35 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 28 Apr 2010 04:36:35 -0000 Received: (qmail 5194 invoked by uid 500); 28 Apr 2010 04:36:35 -0000 Delivered-To: apmail-lucene-mahout-commits-archive@lucene.apache.org Received: (qmail 5089 invoked by uid 500); 28 Apr 2010 04:36:32 -0000 Mailing-List: contact mahout-commits-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: mahout-dev@lucene.apache.org Delivered-To: mailing list mahout-commits@lucene.apache.org Received: (qmail 5080 invoked by uid 99); 28 Apr 2010 04:36:32 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 28 Apr 2010 04:36:32 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 28 Apr 2010 04:36:27 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id A9C1F23888D2; Wed, 28 Apr 2010 04:35:42 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r938781 - in /lucene/mahout/trunk: core/src/main/java/org/apache/mahout/math/ math/src/main/java/org/apache/mahout/math/ math/src/test/java/org/apache/mahout/math/ Date: Wed, 28 Apr 2010 04:35:42 -0000 To: mahout-commits@lucene.apache.org From: srowen@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100428043542.A9C1F23888D2@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: srowen Date: Wed Apr 28 04:35:41 2010 New Revision: 938781 URL: http://svn.apache.org/viewvc?rev=938781&view=rev Log: MAHOUT-385 unify vector writable Removed: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/math/DenseVectorWritable.java lucene/mahout/trunk/core/src/main/java/org/apache/mahout/math/NamedVectorWritable.java lucene/mahout/trunk/core/src/main/java/org/apache/mahout/math/RandomAccessSparseVectorWritable.java lucene/mahout/trunk/core/src/main/java/org/apache/mahout/math/SequentialAccessSparseVectorWritable.java Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/math/VectorWritable.java lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractMatrix.java lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractVector.java lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseVector.java lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/NamedVector.java lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/RandomAccessSparseVector.java lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/SequentialAccessSparseVector.java lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/Vector.java lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/VectorView.java lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/AbstractTestVector.java lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/TestVectorView.java lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/VectorTest.java Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/math/VectorWritable.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/math/VectorWritable.java?rev=938781&r1=938780&r2=938781&view=diff ============================================================================== --- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/math/VectorWritable.java (original) +++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/math/VectorWritable.java Wed Apr 28 04:35:41 2010 @@ -23,10 +23,15 @@ import org.apache.hadoop.io.Writable; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; +import java.util.Iterator; public class VectorWritable extends Configured implements Writable { + public static final int FLAG_DENSE = 0x01; + public static final int FLAG_SEQUENTIAL = 0x02; + public static final int FLAG_NAMED = 0x04; + public static final int NUM_FLAGS = 3; + private Vector vector; public VectorWritable() { @@ -46,50 +51,71 @@ public class VectorWritable extends Conf @Override public void write(DataOutput out) throws IOException { - VectorWritable writable; - Class vectorClass = vector.getClass(); - String writableClassName = vectorClass.getName() + "Writable"; - try { - Class vectorWritableClass = - Class.forName(writableClassName).asSubclass(VectorWritable.class); - writable = vectorWritableClass.getConstructor(vectorClass).newInstance(vector); - } catch (ClassNotFoundException cnfe) { - throw new IOException(cnfe); - } catch (NoSuchMethodException nsme) { - throw new IOException(nsme); - } catch (InvocationTargetException ite) { - throw new IOException(ite); - } catch (InstantiationException ie) { - throw new IOException(ie); - } catch (IllegalAccessException iae) { - throw new IOException(iae); + + boolean dense = vector.isDense(); + boolean sequential = vector.isSequentialAccess(); + boolean named = vector instanceof NamedVector; + + int flags = (dense ? FLAG_DENSE : 0) | (sequential ? FLAG_SEQUENTIAL : 0) | (named ? FLAG_NAMED : 0); + out.writeByte(flags); + + if (dense) { + out.writeInt(vector.size()); + for (Vector.Element element : vector) { + out.writeDouble(element.get()); + } + } else { + out.writeInt(vector.size()); + out.writeInt(vector.getNumNondefaultElements()); + Iterator iter = vector.iterateNonZero(); + while (iter.hasNext()) { + Vector.Element element = iter.next(); + out.writeInt(element.index()); + out.writeDouble(element.get()); + } + } + if (named) { + out.writeUTF(((NamedVector) vector).getName()); } - out.writeUTF(writableClassName); - writable.write(out); } @Override public void readFields(DataInput in) throws IOException { - String writableClassName = in.readUTF(); - try { - Class writableClass = - Class.forName(writableClassName).asSubclass(VectorWritable.class); - VectorWritable writable = writableClass.getConstructor().newInstance(); - writable.readFields(in); - vector = writable.get(); - } catch (ClassNotFoundException cnfe) { - throw new IOException(cnfe); - } catch (ClassCastException cce) { - throw new IOException(cce); - } catch (InstantiationException ie) { - throw new IOException(ie); - } catch (IllegalAccessException iae) { - throw new IOException(iae); - } catch (NoSuchMethodException nsme) { - throw new IOException(nsme); - } catch (InvocationTargetException ite) { - throw new IOException(ite); + int flags = in.readByte(); + if (flags >> NUM_FLAGS != 0) { + throw new IllegalArgumentException(); + } + boolean dense = (flags & FLAG_DENSE) != 0; + boolean sequential = (flags & FLAG_SEQUENTIAL) != 0; + boolean named = (flags & FLAG_NAMED) != 0; + + Vector v; + if (dense) { + int size = in.readInt(); + double[] values = new double[size]; + for (int i = 0; i < size; i++) { + values[i] = in.readDouble(); + } + v = new DenseVector(values); + } else { + int size = in.readInt(); + int numNonDefaultElements = in.readInt(); + if (sequential) { + v = new SequentialAccessSparseVector(size, numNonDefaultElements); + } else { + v = new RandomAccessSparseVector(size, numNonDefaultElements); + } + for (int i = 0; i < numNonDefaultElements; i++) { + int index = in.readInt(); + double value = in.readDouble(); + v.setQuick(index, value); + } + } + if (named) { + String name = in.readUTF(); + v = new NamedVector(v, name); } + vector = v; } /** Write the vector to the output */ Modified: lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractMatrix.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractMatrix.java?rev=938781&r1=938780&r2=938781&view=diff ============================================================================== --- lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractMatrix.java (original) +++ lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractMatrix.java Wed Apr 28 04:35:41 2010 @@ -519,6 +519,14 @@ public abstract class AbstractMatrix imp return v; } + public boolean isDense() { + return true; + } + + public boolean isSequentialAccess() { + return true; + } + @Override protected Matrix matrixLike(int rows, int columns) { return matrix.like(rows, columns); @@ -583,8 +591,7 @@ public abstract class AbstractMatrix imp v.setQuick(transposeOffset, value); } - protected Vector newVector(int cardinality) - { + protected Vector newVector(int cardinality) { return new DenseVector(cardinality); } Modified: lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractVector.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractVector.java?rev=938781&r1=938780&r2=938781&view=diff ============================================================================== --- lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractVector.java (original) +++ lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/AbstractVector.java Wed Apr 28 04:35:41 2010 @@ -18,9 +18,7 @@ package org.apache.mahout.math; import java.lang.reflect.Type; -import java.util.HashMap; import java.util.Iterator; -import java.util.Map; import org.apache.mahout.math.function.BinaryFunction; import org.apache.mahout.math.function.UnaryFunction; @@ -32,11 +30,6 @@ import com.google.gson.reflect.TypeToken /** Implementations of generic capabilities like sum of elements and dot products */ public abstract class AbstractVector implements Vector { - /** - * User-settable mapping between String labels and Integer indices. Marked transient so that it will not be serialized - * with each vector instance. - */ - private transient Map bindings; private int size; protected double lengthSquared = -1.0; @@ -80,19 +73,7 @@ public abstract class AbstractVector imp } @Override - public Vector clone() { - AbstractVector clone; - try { - clone = (AbstractVector) super.clone(); - } catch (CloneNotSupportedException cnse) { - throw new IllegalStateException(cnse); // Can't happen - } - if (bindings != null) { - clone.bindings = (Map) ((HashMap) bindings).clone(); - } - // name is OK - return clone; - } + public abstract Vector clone(); public Vector divide(double x) { if (x == 1.0) { @@ -310,13 +291,23 @@ public abstract class AbstractVector imp if (size != x.size()) { throw new CardinalityException(size, x.size()); } + + Vector to = this; + Vector from = x; + // Clone and edit to the sparse one; if both are sparse, add from the more sparse one + if (isDense() || (!x.isDense() && + getNumNondefaultElements() < x.getNumNondefaultElements())) { + to = x; + from = this; + } + //TODO: get smarter about this, if we are adding a dense to a sparse, then we should return a dense - Vector result = clone(); - Iterator iter = x.iterateNonZero(); + Vector result = to.clone(); + Iterator iter = from.iterateNonZero(); while (iter.hasNext()) { Element e = iter.next(); int index = e.index(); - result.setQuick(index, getQuick(index) + e.get()); + result.setQuick(index, result.getQuick(index) + e.get()); } return result; } @@ -358,11 +349,20 @@ public abstract class AbstractVector imp if (size != x.size()) { throw new CardinalityException(size, x.size()); } - Vector result = clone(); + + Vector to = this; + Vector from = x; + // Clone and edit to the sparse one; if both are sparse, edit the more sparse one (more zeroes) + if (isDense() || (!x.isDense() && getNumNondefaultElements() > x.getNumNondefaultElements())) { + to = x; + from = this; + } + + Vector result = to.clone(); Iterator iter = result.iterateNonZero(); while (iter.hasNext()) { Element element = iter.next(); - element.set(element.get() * x.getQuick(element.index())); + element.set(element.get() * from.getQuick(element.index())); } return result; @@ -536,42 +536,4 @@ public abstract class AbstractVector imp return result.toString(); } - public double get(String label) throws IndexException, UnboundLabelException { - if (bindings == null) { - throw new UnboundLabelException(); - } - Integer index = bindings.get(label); - if (index == null) { - throw new UnboundLabelException(); - } - return get(index); - } - - public Map getLabelBindings() { - return bindings; - } - - public void set(String label, double value) throws IndexException, - UnboundLabelException { - if (bindings == null) { - throw new UnboundLabelException(); - } - Integer index = bindings.get(label); - if (index == null) { - throw new UnboundLabelException(); - } - set(index, value); - } - - public void setLabelBindings(Map bindings) { - this.bindings = bindings; - } - - public void set(String label, int index, double value) throws IndexException { - if (bindings == null) { - bindings = new HashMap(); - } - bindings.put(label, index); - set(index, value); - } } Modified: lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseVector.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseVector.java?rev=938781&r1=938780&r2=938781&view=diff ============================================================================== --- lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseVector.java (original) +++ lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseVector.java Wed Apr 28 04:35:41 2010 @@ -75,9 +75,15 @@ public class DenseVector extends Abstrac @Override public DenseVector clone() { - DenseVector clone = (DenseVector) super.clone(); - clone.values = values.clone(); - return clone; + return new DenseVector(values.clone()); + } + + public boolean isDense() { + return true; + } + + public boolean isSequentialAccess() { + return true; } @Override @@ -96,15 +102,7 @@ public class DenseVector extends Abstrac } public DenseVector like() { - DenseVector denseVector = new DenseVector(size()); - denseVector.setLabelBindings(getLabelBindings()); - return denseVector; - } - - public Vector like(int cardinality) { - Vector denseVector = new DenseVector(cardinality); - denseVector.setLabelBindings(getLabelBindings()); - return denseVector; + return new DenseVector(size()); } public void setQuick(int index, double value) { Modified: lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/NamedVector.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/NamedVector.java?rev=938781&r1=938780&r2=938781&view=diff ============================================================================== --- lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/NamedVector.java (original) +++ lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/NamedVector.java Wed Apr 28 04:35:41 2010 @@ -18,7 +18,6 @@ package org.apache.mahout.math; import java.util.Iterator; -import java.util.Map; import org.apache.mahout.math.function.BinaryFunction; import org.apache.mahout.math.function.UnaryFunction; @@ -64,11 +63,10 @@ public class NamedVector implements Vect } @Override - public Vector clone() { + public NamedVector clone() { return new NamedVector(delegate.clone(), name); } - public String asFormatString() { return delegate.asFormatString(); } @@ -101,20 +99,20 @@ public class NamedVector implements Vect return delegate.size(); } - public Iterator iterator() { - return delegate.iterator(); + public boolean isDense() { + return delegate.isDense(); } - public Iterator iterateNonZero() { - return delegate.iterateNonZero(); + public boolean isSequentialAccess() { + return delegate.isSequentialAccess(); } - public double get(String label) throws IndexException, UnboundLabelException { - return delegate.get(label); + public Iterator iterator() { + return delegate.iterator(); } - public Map getLabelBindings() { - return delegate.getLabelBindings(); + public Iterator iterateNonZero() { + return delegate.iterateNonZero(); } public Element getElement(int index) { @@ -137,12 +135,8 @@ public class NamedVector implements Vect return delegate.getQuick(index); } - public Vector like() { - return delegate.like(); - } - - public Vector like(int cardinality) { - return delegate.like(cardinality); + public NamedVector like() { + return new NamedVector(delegate.like(), name); } public Vector minus(Vector x) { @@ -177,18 +171,6 @@ public class NamedVector implements Vect return delegate.plus(x); } - public void set(String label, double value) throws IndexException, UnboundLabelException { - delegate.set(label, value); - } - - public void set(String label, int index, double value) throws IndexException { - delegate.set(label, index, value); - } - - public void setLabelBindings(Map bindings) { - delegate.setLabelBindings(bindings); - } - public void set(int index, double value) { delegate.set(index, value); } Modified: lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/RandomAccessSparseVector.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/RandomAccessSparseVector.java?rev=938781&r1=938780&r2=938781&view=diff ============================================================================== --- lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/RandomAccessSparseVector.java (original) +++ lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/RandomAccessSparseVector.java Wed Apr 28 04:35:41 2010 @@ -55,7 +55,7 @@ public class RandomAccessSparseVector ex } } - RandomAccessSparseVector(int cardinality, OpenIntDoubleHashMap values) { + private RandomAccessSparseVector(int cardinality, OpenIntDoubleHashMap values) { super(cardinality); this.values = values; } @@ -73,9 +73,7 @@ public class RandomAccessSparseVector ex @Override public RandomAccessSparseVector clone() { - RandomAccessSparseVector clone = (RandomAccessSparseVector) super.clone(); - clone.values = (OpenIntDoubleHashMap)values.clone(); - return clone; + return new RandomAccessSparseVector(size(), (OpenIntDoubleHashMap) values.clone()); } @Override @@ -92,13 +90,25 @@ public class RandomAccessSparseVector ex return this; } + public boolean isDense() { + return false; + } + + public boolean isSequentialAccess() { + return false; + } + public double getQuick(int index) { return values.get(index); } public void setQuick(int index, double value) { lengthSquared = -1.0; - values.put(index, value); + if (value == 0.0) { + values.removeKey(index); + } else { + values.put(index, value); + } } public int getNumNondefaultElements() { @@ -106,19 +116,7 @@ public class RandomAccessSparseVector ex } public RandomAccessSparseVector like() { - int numValues = 256; - if (values != null) { - numValues = values.size(); - } - return new RandomAccessSparseVector(size(), numValues); - } - - public Vector like(int newCardinality) { - int numValues = 256; - if (values != null) { - numValues = values.size(); - } - return new RandomAccessSparseVector(newCardinality, numValues); + return new RandomAccessSparseVector(size(), values.size()); } /** @@ -252,7 +250,11 @@ public class RandomAccessSparseVector ex public void set(double value) { lengthSquared = -1; - values.put(index, value); + if (value == 0.0) { + values.removeKey(index); + } else { + values.put(index, value); + } } } Modified: lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/SequentialAccessSparseVector.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/SequentialAccessSparseVector.java?rev=938781&r1=938780&r2=938781&view=diff ============================================================================== --- lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/SequentialAccessSparseVector.java (original) +++ lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/SequentialAccessSparseVector.java Wed Apr 28 04:35:41 2010 @@ -80,7 +80,7 @@ public class SequentialAccessSparseVecto values = other.values.clone(); } - SequentialAccessSparseVector(int cardinality, OrderedIntDoubleMapping values) { + private SequentialAccessSparseVector(int cardinality, OrderedIntDoubleMapping values) { super(cardinality); this.values = values; } @@ -93,9 +93,15 @@ public class SequentialAccessSparseVecto @Override public SequentialAccessSparseVector clone() { - SequentialAccessSparseVector clone = (SequentialAccessSparseVector) super.clone(); - clone.values = values.clone(); - return clone; + return new SequentialAccessSparseVector(size(), values.clone()); + } + + public boolean isDense() { + return false; + } + + public boolean isSequentialAccess() { + return true; } public double getQuick(int index) { @@ -112,19 +118,7 @@ public class SequentialAccessSparseVecto } public SequentialAccessSparseVector like() { - int numValues = 256; - if (values != null) { - numValues = values.getNumMappings(); - } - return new SequentialAccessSparseVector(size(), numValues); - } - - public Vector like(int newCardinality) { - int numValues = 256; - if (values != null) { - numValues = values.getNumMappings(); - } - return new SequentialAccessSparseVector(newCardinality, numValues); + return new SequentialAccessSparseVector(size(), values.getNumMappings()); } public Iterator iterateNonZero() { Modified: lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/Vector.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/Vector.java?rev=938781&r1=938780&r2=938781&view=diff ============================================================================== --- lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/Vector.java (original) +++ lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/Vector.java Wed Apr 28 04:35:41 2010 @@ -22,7 +22,6 @@ import org.apache.mahout.math.function.B import org.apache.mahout.math.function.UnaryFunction; import java.util.Iterator; -import java.util.Map; /** * The basic interface including numerous convenience functions

NOTE: All implementing classes must have a @@ -94,6 +93,10 @@ public interface Vector extends Cloneabl */ int size(); + boolean isDense(); + + boolean isSequentialAccess(); + /** * Return a copy of the recipient * @@ -118,23 +121,6 @@ public interface Vector extends Cloneabl Iterator iterateNonZero(); /** - * Return the value at the index defined by the label - * - * @param label a String label that maps to an index - * @return the double at the index - * @throws IndexException if the index is out of bounds - * @throws UnboundLabelException if the label is unbound - */ - double get(String label) throws IndexException, UnboundLabelException; - - /** - * Return a map of the current label bindings of the receiver - * - * @return a Map - */ - Map getLabelBindings(); - - /** * Return an object of Vector.Element representing an element of this Vector. Useful when designing new iterator * types. * @@ -201,14 +187,6 @@ public interface Vector extends Cloneabl Vector like(); /** - * Return an empty vector of the same underlying class as the receiver and of the given cardinality - * - * @param cardinality an int specifying the desired cardinality - * @return a Vector - */ - Vector like(int cardinality); - - /** * Return a new vector containing the element by element difference of the recipient and the argument * * @param x a Vector @@ -271,31 +249,6 @@ public interface Vector extends Cloneabl Vector plus(Vector x); /** - * Set the value at the index that is mapped to the label - * - * @param label a String label that maps to an index - * @param value the double value at the index - */ - void set(String label, double value) throws IndexException, - UnboundLabelException; - - /** - * Set the value at the index and add the label to the bindings - * - * @param label a String label that maps to an index - * @param index an int index - * @param value a double value - */ - void set(String label, int index, double value) throws IndexException; - - /** - * Sets a map of label bindings in the receiver - * - * @param bindings a {@link Map} of label bindings - */ - void setLabelBindings(Map bindings); - - /** * Set the value at the given index * * @param index an int index into the receiver Modified: lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/VectorView.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/VectorView.java?rev=938781&r1=938780&r2=938781&view=diff ============================================================================== --- lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/VectorView.java (original) +++ lucene/mahout/trunk/math/src/main/java/org/apache/mahout/math/VectorView.java Wed Apr 28 04:35:41 2010 @@ -46,21 +46,23 @@ public class VectorView extends Abstract @Override public Vector clone() { - VectorView clone = (VectorView) super.clone(); - clone.vector = vector.clone(); - return clone; + return new VectorView(vector.clone(), offset, size()); } - public double getQuick(int index) { - return vector.getQuick(offset + index); + public boolean isDense() { + return vector.isDense(); + } + + public boolean isSequentialAccess() { + return vector.isSequentialAccess(); } - public Vector like() { - return vector.like(); + public VectorView like() { + return new VectorView(vector.like(), offset, size()); } - public Vector like(int cardinality) { - return vector.like(cardinality); + public double getQuick(int index) { + return vector.getQuick(offset + index); } public void setQuick(int index, double value) { Modified: lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/AbstractTestVector.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/AbstractTestVector.java?rev=938781&r1=938780&r2=938781&view=diff ============================================================================== --- lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/AbstractTestVector.java (original) +++ lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/AbstractTestVector.java Wed Apr 28 04:35:41 2010 @@ -20,9 +20,7 @@ package org.apache.mahout.math; import junit.framework.TestCase; import static org.apache.mahout.math.function.Functions.*; -import java.util.HashMap; import java.util.Iterator; -import java.util.Map; abstract class AbstractTestVector extends TestCase { @@ -448,26 +446,12 @@ abstract class AbstractTestVector extend } } - public void testAssignBinaryFunctionCardinality() { - try { - test.assign(test.like(2), plus); - fail("Cardinality exception expected"); - } catch (CardinalityException e) { - } - } - public void testLike() { Vector other = test.like(); assertTrue("not like", test.getClass().isAssignableFrom(other.getClass())); assertEquals("size", test.size(), other.size()); } - public void testLikeN() { - Vector other = test.like(8); - assertTrue("not like", test.getClass().isAssignableFrom(other.getClass())); - assertEquals("size", 8, other.size()); - } - public void testCrossProduct() { Matrix result = test.cross(test); assertEquals("row size", test.size(), result.size()[0]); @@ -480,16 +464,4 @@ abstract class AbstractTestVector extend } } - public void testLabelIndexing() { - Map bindings = new HashMap(); - bindings.put("Fee", 0); - bindings.put("Fie", 1); - bindings.put("Foe", 2); - test.setLabelBindings(bindings); - assertEquals("Fee", test.get(0), test.get("Fee")); - assertEquals("Fie", test.get(1), test.get("Fie")); - assertEquals("Foe", test.get(2), test.get("Foe")); - test.set("Fie", 15.3); - assertEquals("Fie", test.get(1), test.get("Fie")); - } } Modified: lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/TestVectorView.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/TestVectorView.java?rev=938781&r1=938780&r2=938781&view=diff ============================================================================== --- lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/TestVectorView.java (original) +++ lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/TestVectorView.java Wed Apr 28 04:35:41 2010 @@ -317,22 +317,8 @@ public class TestVectorView extends Test } } - public void testAssignBinaryFunctionCardinality() { - try { - test.assign(test.like(2), plus); - fail("Cardinality exception expected"); - } catch (CardinalityException e) { - } - } - public void testLike() { - assertTrue("not like", test.like() instanceof DenseVector); - } - - public void testLikeN() { - Vector other = test.like(5); - assertTrue("not like", other instanceof DenseVector); - assertEquals("size", 5, other.size()); + assertTrue("not like", test.like() instanceof VectorView); } public void testCrossProduct() { Modified: lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/VectorTest.java URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/VectorTest.java?rev=938781&r1=938780&r2=938781&view=diff ============================================================================== --- lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/VectorTest.java (original) +++ lucene/mahout/trunk/math/src/test/java/org/apache/mahout/math/VectorTest.java Wed Apr 28 04:35:41 2010 @@ -589,31 +589,6 @@ public class VectorTest extends TestCase v.setQuick(3, 2); } - public void testLabelSerializationDense() { - double[] values = {1.1, 2.2, 3.3}; - Vector test = new DenseVector(values); - Map bindings = new HashMap(); - bindings.put("Fee", 0); - bindings.put("Fie", 1); - bindings.put("Foe", 2); - test.setLabelBindings(bindings); - - Type vectorType = new TypeToken() { - }.getType(); - - GsonBuilder builder = new GsonBuilder(); - builder.registerTypeAdapter(vectorType, new JsonVectorAdapter()); - Gson gson = builder.create(); - String json = gson.toJson(test, vectorType); - Vector test1 = gson.fromJson(json, vectorType); - try { - test1.get("Fee"); - fail(); - } catch (UnboundLabelException e) { - } - } - - public void testNameSerialization() throws Exception { double[] values = {1.1, 2.2, 3.3}; Vector test = new DenseVector(values); @@ -629,43 +604,6 @@ public class VectorTest extends TestCase assertEquals("noName and decode are not equal", noName, decode); } - public void testLabelSerializationSparse() { - double[] values = {1.1, 2.2, 3.3}; - Vector test = new RandomAccessSparseVector(3); - for (int i = 0; i < values.length; i++) { - test.set(i, values[i]); - } - Map bindings = new HashMap(); - bindings.put("Fee", 0); - bindings.put("Fie", 1); - bindings.put("Foe", 2); - test.setLabelBindings(bindings); - - Type vectorType = new TypeToken() { - }.getType(); - - GsonBuilder builder = new GsonBuilder(); - builder.registerTypeAdapter(vectorType, new JsonVectorAdapter()); - Gson gson = builder.create(); - String json = gson.toJson(test, vectorType); - Vector test1 = gson.fromJson(json, vectorType); - try { - test1.get("Fee"); - fail(); - } catch (UnboundLabelException e) { - } - } - - public void testLabelSet() { - Vector test = new DenseVector(3); - test.set("Fee", 0, 1.1); - test.set("Fie", 1, 2.2); - test.set("Foe", 2, 3.3); - assertEquals("Fee", 1.1, test.get("Fee")); - assertEquals("Fie", 2.2, test.get("Fie")); - assertEquals("Foe", 3.3, test.get("Foe")); - } - public void testHashCodeEquivalence() { // Hash codes must be equal if the vectors are considered equal Vector sparseLeft = new RandomAccessSparseVector(3);