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;
 


Reply via email to