Author: dlyubimov Date: Thu Jul 25 23:09:58 2013 New Revision: 1507150 URL: http://svn.apache.org/r1507150 Log: MAHOUT-1280: moving UpperTriangularMatrix to mahout-math as well as adding Symmetric matrix as a first class citizen.
Squashed commit of the following: commit 50d97093eff5416b7b644efaae159ea35d7e7279 Author: Dmitriy Lyubimov <[email protected]> Date: Wed Jul 17 23:35:49 2013 -0700 Illegal like() commit 7ce78c1dfc7b2c15fef787380e617b873df5890d Author: Dmitriy Lyubimov <[email protected]> Date: Wed Jul 10 12:54:46 2013 -0700 Bug fixes in constructor-by-vector commit ef11cfa02727fb29b2533c0848734809f77f8a3e Author: Dmitriy Lyubimov <[email protected]> Date: Wed Jul 10 11:22:06 2013 -0700 Switching SSVD uses to UpperTriangular. commit 3e73a8cd7ba32cb8696d76b93ec287540c710f68 Author: Dmitriy Lyubimov <[email protected]> Date: Wed Jul 10 10:55:11 2013 -0700 Adding test for dense symmetric matrix asserting Eigen decomposition equivalent to that over a dense matrix. commit 6fc530b75215c5ad1c0b5561ff3af724c6e48c6b Author: Dmitriy Lyubimov <[email protected]> Date: Tue Jul 9 18:30:59 2013 -0700 Moving UpperTriangular matrix to mahout.math; adding DenseSymmetric matrix. Added: mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseSymmetricMatrix.java mahout/trunk/math/src/main/java/org/apache/mahout/math/UpperTriangular.java - copied, changed from r1501110, mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/UpperTriangular.java mahout/trunk/math/src/test/java/org/apache/mahout/math/DenseSymmetricTest.java - copied, changed from r1501110, mahout/trunk/core/src/test/java/org/apache/mahout/math/hadoop/stochasticsvd/UpperTriangularTest.java mahout/trunk/math/src/test/java/org/apache/mahout/math/UpperTriangularTest.java - copied, changed from r1501110, mahout/trunk/core/src/test/java/org/apache/mahout/math/hadoop/stochasticsvd/UpperTriangularTest.java Removed: mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/UpperTriangular.java mahout/trunk/core/src/test/java/org/apache/mahout/math/hadoop/stochasticsvd/UpperTriangularTest.java Modified: mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/BtJob.java mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/SSVDHelper.java mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/SSVDSolver.java mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/YtYJob.java mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/GivensThinSolver.java mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/QRFirstStep.java mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/QRLastStep.java Modified: mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/BtJob.java URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/BtJob.java?rev=1507150&r1=1507149&r2=1507150&view=diff ============================================================================== --- mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/BtJob.java (original) +++ mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/BtJob.java Thu Jul 25 23:09:58 2013 @@ -17,11 +17,6 @@ package org.apache.mahout.math.hadoop.stochasticsvd; -import java.io.Closeable; -import java.io.IOException; -import java.util.ArrayDeque; -import java.util.Deque; - import org.apache.commons.lang3.Validate; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.filecache.DistributedCache; @@ -50,32 +45,37 @@ import org.apache.mahout.common.iterator import org.apache.mahout.common.iterator.sequencefile.SequenceFileValueIterator; import org.apache.mahout.math.DenseVector; import org.apache.mahout.math.NamedVector; +import org.apache.mahout.math.UpperTriangular; import org.apache.mahout.math.Vector; import org.apache.mahout.math.VectorWritable; import org.apache.mahout.math.function.Functions; import org.apache.mahout.math.function.PlusMult; import org.apache.mahout.math.hadoop.stochasticsvd.qr.QRLastStep; +import java.io.Closeable; +import java.io.IOException; +import java.util.ArrayDeque; +import java.util.Deque; + /** * Bt job. For details, see working notes in MAHOUT-376. - * <P> - * + * <p/> + * <p/> * Uses hadoop deprecated API wherever new api has not been updated * (MAHOUT-593), hence @SuppressWarning("deprecation"). - * <P> - * + * <p/> + * <p/> * This job outputs either Bt in its standard output, or upper triangular * matrices representing BBt partial sums if that's requested . If the latter * mode is enabled, then we accumulate BBt outer product sums in upper * triangular accumulator and output it at the end of the job, thus saving space * and BBt job. - * <P> - * + * <p/> + * <p/> * This job also outputs Q and Bt and optionally BBt. Bt is output to standard * job output (part-*) and Q and BBt use named multiple outputs. - * - * <P> - * + * <p/> + * <p/> */ @SuppressWarnings("deprecation") public final class BtJob { @@ -101,7 +101,7 @@ public final class BtJob { } public static class BtMapper extends - Mapper<Writable, VectorWritable, LongWritable, SparseRowBlockWritable> { + Mapper<Writable, VectorWritable, LongWritable, SparseRowBlockWritable> { private QRLastStep qr; private final Deque<Closeable> closeables = new ArrayDeque<Closeable>(); @@ -308,8 +308,8 @@ public final class BtJob { } public static class OuterProductCombiner - extends - Reducer<Writable, SparseRowBlockWritable, Writable, SparseRowBlockWritable> { + extends + Reducer<Writable, SparseRowBlockWritable, Writable, SparseRowBlockWritable> { protected final SparseRowBlockWritable accum = new SparseRowBlockWritable(); protected final Deque<Closeable> closeables = new ArrayDeque<Closeable>(); @@ -343,8 +343,8 @@ public final class BtJob { } public static class OuterProductReducer - extends - Reducer<LongWritable, SparseRowBlockWritable, IntWritable, VectorWritable> { + extends + Reducer<LongWritable, SparseRowBlockWritable, IntWritable, VectorWritable> { protected final SparseRowBlockWritable accum = new SparseRowBlockWritable(); protected final Deque<Closeable> closeables = new ArrayDeque<Closeable>(); Modified: mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/SSVDHelper.java URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/SSVDHelper.java?rev=1507150&r1=1507149&r2=1507150&view=diff ============================================================================== --- mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/SSVDHelper.java (original) +++ mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/SSVDHelper.java Thu Jul 25 23:09:58 2013 @@ -37,6 +37,7 @@ import org.apache.mahout.common.iterator import org.apache.mahout.common.iterator.sequencefile.SequenceFileValueIterable; import org.apache.mahout.math.DenseVector; import org.apache.mahout.math.Matrix; +import org.apache.mahout.math.UpperTriangular; import org.apache.mahout.math.Vector; import org.apache.mahout.math.VectorWritable; import org.apache.mahout.math.function.Functions; Modified: mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/SSVDSolver.java URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/SSVDSolver.java?rev=1507150&r1=1507149&r2=1507150&view=diff ============================================================================== --- mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/SSVDSolver.java (original) +++ mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/SSVDSolver.java Thu Jul 25 23:09:58 2013 @@ -28,11 +28,7 @@ import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Writable; import org.apache.mahout.common.IOUtils; import org.apache.mahout.common.RandomUtils; -import org.apache.mahout.math.DenseMatrix; -import org.apache.mahout.math.DenseVector; -import org.apache.mahout.math.DistributedRowMatrixWriter; -import org.apache.mahout.math.Matrix; -import org.apache.mahout.math.Vector; +import org.apache.mahout.math.*; import org.apache.mahout.math.function.Functions; import org.apache.mahout.math.ssvd.EigenSolverWrapper; @@ -502,7 +498,7 @@ public final class SSVDSolver { sqPath = new Path(btPath, BtJob.OUTPUT_SQ + "-*"); } - UpperTriangular bbtTriangular = + org.apache.mahout.math.UpperTriangular bbtTriangular = SSVDHelper.loadAndSumUpperTriangularMatrices(new Path(btPath, BtJob.OUTPUT_BBT + "-*"), conf); Modified: mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/YtYJob.java URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/YtYJob.java?rev=1507150&r1=1507149&r2=1507150&view=diff ============================================================================== --- mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/YtYJob.java (original) +++ mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/YtYJob.java Thu Jul 25 23:09:58 2013 @@ -16,8 +16,6 @@ */ package org.apache.mahout.math.hadoop.stochasticsvd; -import java.io.IOException; - import org.apache.commons.lang3.Validate; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; @@ -32,12 +30,14 @@ import org.apache.hadoop.mapreduce.lib.i import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat; import org.apache.mahout.math.DenseVector; +import org.apache.mahout.math.UpperTriangular; import org.apache.mahout.math.Vector; import org.apache.mahout.math.VectorWritable; +import java.io.IOException; + /** * Job that accumulates Y'Y output - * */ public final class YtYJob { @@ -52,7 +52,7 @@ public final class YtYJob { } public static class YtYMapper extends - Mapper<Writable, VectorWritable, IntWritable, VectorWritable> { + Mapper<Writable, VectorWritable, IntWritable, VectorWritable> { private int kp; private Omega omega; @@ -131,13 +131,13 @@ public final class YtYJob { protected void cleanup(Context context) throws IOException, InterruptedException { context.write(new IntWritable(context.getTaskAttemptID().getTaskID() - .getId()), + .getId()), new VectorWritable(new DenseVector(mYtY.getData()))); } } public static class YtYReducer extends - Reducer<IntWritable, VectorWritable, IntWritable, VectorWritable> { + Reducer<IntWritable, VectorWritable, IntWritable, VectorWritable> { private final VectorWritable accum = new VectorWritable(); private DenseVector acc; Modified: mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/GivensThinSolver.java URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/GivensThinSolver.java?rev=1507150&r1=1507149&r2=1507150&view=diff ============================================================================== --- mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/GivensThinSolver.java (original) +++ mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/GivensThinSolver.java Thu Jul 25 23:09:58 2013 @@ -27,7 +27,7 @@ import org.apache.mahout.math.DenseVecto import org.apache.mahout.math.Matrix; import org.apache.mahout.math.OrderedIntDoubleMapping; import org.apache.mahout.math.Vector; -import org.apache.mahout.math.hadoop.stochasticsvd.UpperTriangular; +import org.apache.mahout.math.UpperTriangular; /** * Givens Thin solver. Standard Givens operations are reordered in a way that Modified: mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/QRFirstStep.java URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/QRFirstStep.java?rev=1507150&r1=1507149&r2=1507150&view=diff ============================================================================== --- mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/QRFirstStep.java (original) +++ mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/QRFirstStep.java Thu Jul 25 23:09:58 2013 @@ -41,7 +41,7 @@ import org.apache.mahout.math.Vector; import org.apache.mahout.math.Vector.Element; import org.apache.mahout.math.VectorWritable; import org.apache.mahout.math.hadoop.stochasticsvd.DenseBlockWritable; -import org.apache.mahout.math.hadoop.stochasticsvd.UpperTriangular; +import org.apache.mahout.math.UpperTriangular; import com.google.common.collect.Lists; import com.google.common.io.Closeables; Modified: mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/QRLastStep.java URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/QRLastStep.java?rev=1507150&r1=1507149&r2=1507150&view=diff ============================================================================== --- mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/QRLastStep.java (original) +++ mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/qr/QRLastStep.java Thu Jul 25 23:09:58 2013 @@ -29,7 +29,7 @@ import org.apache.mahout.math.DenseVecto import org.apache.mahout.math.Vector; import org.apache.mahout.math.VectorWritable; import org.apache.mahout.math.hadoop.stochasticsvd.DenseBlockWritable; -import org.apache.mahout.math.hadoop.stochasticsvd.UpperTriangular; +import org.apache.mahout.math.UpperTriangular; import com.google.common.collect.Lists; Added: mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseSymmetricMatrix.java URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseSymmetricMatrix.java?rev=1507150&view=auto ============================================================================== --- mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseSymmetricMatrix.java (added) +++ mahout/trunk/math/src/main/java/org/apache/mahout/math/DenseSymmetricMatrix.java Thu Jul 25 23:09:58 2013 @@ -0,0 +1,60 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.mahout.math; + +/** + * Economy packaging for a dense symmetric in-core matrix. + */ +public class DenseSymmetricMatrix extends UpperTriangular { + public DenseSymmetricMatrix(int n) { + super(n); + } + + public DenseSymmetricMatrix(double[] data, boolean shallow) { + super(data, shallow); + } + + public DenseSymmetricMatrix(Vector data) { + super(data); + } + + public DenseSymmetricMatrix(UpperTriangular mx) { + super(mx); + } + + @Override + public double getQuick(int row, int column) { + if (column < row) { + int swap = row; + row = column; + column = swap; + } + return super.getQuick(row, column); + } + + @Override + public void setQuick(int row, int column, double value) { + if (column < row) { + int swap = row; + row = column; + column = swap; + } + super.setQuick(row, column, value); + } + +} Copied: mahout/trunk/math/src/main/java/org/apache/mahout/math/UpperTriangular.java (from r1501110, mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/UpperTriangular.java) URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/UpperTriangular.java?p2=mahout/trunk/math/src/main/java/org/apache/mahout/math/UpperTriangular.java&p1=mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/UpperTriangular.java&r1=1501110&r2=1507150&rev=1507150&view=diff ============================================================================== --- mahout/trunk/core/src/main/java/org/apache/mahout/math/hadoop/stochasticsvd/UpperTriangular.java (original) +++ mahout/trunk/math/src/main/java/org/apache/mahout/math/UpperTriangular.java Thu Jul 25 23:09:58 2013 @@ -15,18 +15,11 @@ * limitations under the License. */ -package org.apache.mahout.math.hadoop.stochasticsvd; - -import org.apache.mahout.math.AbstractMatrix; -import org.apache.mahout.math.DenseMatrix; -import org.apache.mahout.math.IndexException; -import org.apache.mahout.math.Matrix; -import org.apache.mahout.math.MatrixView; -import org.apache.mahout.math.Vector; +package org.apache.mahout.math; /** * - * Quick and dirty implementation of some {@link Matrix} methods + * Quick and dirty implementation of some {@link org.apache.mahout.math.Matrix} methods * over packed upper triangular matrix. * */ @@ -60,15 +53,13 @@ public class UpperTriangular extends Abs public UpperTriangular(Vector data) { this(elementsToMatrixSize(data.size())); - values = new double[rows * (rows + 1) / 2]; - rows = data.size(); - for (int i = 0; i < rows; i++) { - values[i] = data.getQuick(i); + for (Vector.Element el:data.nonZeroes()) { + values[el.index()] = el.get(); } } - private static int elementsToMatrixSize(int size) { - return (int) Math.round((-1 + Math.sqrt(1 + 8 * size)) / 2); + private static int elementsToMatrixSize(int dataSize) { + return (int) Math.round((-1 + Math.sqrt(1 + 8 * dataSize)) / 2); } // copy-constructor Copied: mahout/trunk/math/src/test/java/org/apache/mahout/math/DenseSymmetricTest.java (from r1501110, mahout/trunk/core/src/test/java/org/apache/mahout/math/hadoop/stochasticsvd/UpperTriangularTest.java) URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/test/java/org/apache/mahout/math/DenseSymmetricTest.java?p2=mahout/trunk/math/src/test/java/org/apache/mahout/math/DenseSymmetricTest.java&p1=mahout/trunk/core/src/test/java/org/apache/mahout/math/hadoop/stochasticsvd/UpperTriangularTest.java&r1=1501110&r2=1507150&rev=1507150&view=diff ============================================================================== --- mahout/trunk/core/src/test/java/org/apache/mahout/math/hadoop/stochasticsvd/UpperTriangularTest.java (original) +++ mahout/trunk/math/src/test/java/org/apache/mahout/math/DenseSymmetricTest.java Thu Jul 25 23:09:58 2013 @@ -15,44 +15,51 @@ * limitations under the License. */ -package org.apache.mahout.math.hadoop.stochasticsvd; +package org.apache.mahout.math; -import org.apache.mahout.common.MahoutTestCase; -import org.apache.mahout.math.DenseMatrix; -import org.apache.mahout.math.DenseVector; -import org.apache.mahout.math.Matrix; import org.apache.mahout.math.function.Functions; +import org.apache.mahout.math.solver.EigenDecomposition; import org.junit.Test; -public class UpperTriangularTest extends MahoutTestCase { +public class DenseSymmetricTest extends MahoutTestCase { @Test public void testBasics() { - Matrix a = new UpperTriangular(new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, false); + Matrix a = new DenseSymmetricMatrix(new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, false); + System.out.println(a.toString()); + assertEquals(0, a.viewDiagonal().minus(new DenseVector(new double[]{1, 5, 8, 10})).norm(1), 1.0e-10); assertEquals(0, a.viewPart(0, 3, 1, 3).viewDiagonal().minus( new DenseVector(new double[]{2, 6, 9})).norm(1), 1.0e-10); assertEquals(4, a.get(0, 3), 1.0e-10); - print(a); + System.out.println(a); + Matrix m = new DenseMatrix(4, 4).assign(a); assertEquals(0, m.minus(a).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10); - print(m); + System.out.println(m); assertEquals(0, m.transpose().times(m).minus(a.transpose().times(a)).aggregate( Functions.PLUS, Functions.ABS), 1.0e-10); + + System.out.println(a.plus(a)); assertEquals(0, m.plus(m).minus(a.plus(a)).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10); } - private static void print(Matrix m) { - for (int i = 0; i < m.rowSize(); i++) { - for (int j = 0; j < m.columnSize(); j++) { - if (Math.abs(m.get(i, j)) > 1.0e-10) { - System.out.printf("%10.3f ", m.get(i, j)); - } else { - System.out.printf("%10s ", (i + j) % 3 == 0 ? "." : ""); - } - } - System.out.printf("\n"); - } - System.out.printf("\n"); + @Test + public void testEigen() { + Matrix a = new DenseSymmetricMatrix(new double[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, false); + Matrix b = new DenseMatrix(a.numRows(), a.numCols()); + b.assign(a); + + assertEquals(0, a.minus(b).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10); + + EigenDecomposition edA = new EigenDecomposition(a); + EigenDecomposition edB = new EigenDecomposition(b); + + System.out.println(edA.getV()); + + assertEquals(0, edA.getV().minus(edB.getV()).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10); + assertEquals(0, edA.getRealEigenvalues().minus(edA.getRealEigenvalues()).aggregate(Functions.PLUS, Functions.ABS), 1.0e-10); + } + } Copied: mahout/trunk/math/src/test/java/org/apache/mahout/math/UpperTriangularTest.java (from r1501110, mahout/trunk/core/src/test/java/org/apache/mahout/math/hadoop/stochasticsvd/UpperTriangularTest.java) URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/test/java/org/apache/mahout/math/UpperTriangularTest.java?p2=mahout/trunk/math/src/test/java/org/apache/mahout/math/UpperTriangularTest.java&p1=mahout/trunk/core/src/test/java/org/apache/mahout/math/hadoop/stochasticsvd/UpperTriangularTest.java&r1=1501110&r2=1507150&rev=1507150&view=diff ============================================================================== --- mahout/trunk/core/src/test/java/org/apache/mahout/math/hadoop/stochasticsvd/UpperTriangularTest.java (original) +++ mahout/trunk/math/src/test/java/org/apache/mahout/math/UpperTriangularTest.java Thu Jul 25 23:09:58 2013 @@ -15,12 +15,8 @@ * limitations under the License. */ -package org.apache.mahout.math.hadoop.stochasticsvd; +package org.apache.mahout.math; -import org.apache.mahout.common.MahoutTestCase; -import org.apache.mahout.math.DenseMatrix; -import org.apache.mahout.math.DenseVector; -import org.apache.mahout.math.Matrix; import org.apache.mahout.math.function.Functions; import org.junit.Test;
