private Map<MatrixSlice, EigenStatus> verifyEigens() {
    Map<MatrixSlice, EigenStatus> eigenMetaData = Maps.newHashMap();

    for (MatrixSlice slice : eigensToVerify) {
      EigenStatus status = eigenVerifier.verify(corpus, slice.vector());
      eigenMetaData.put(slice, status);
    }
    return eigenMetaData;
  }
 public int printDistributedRowMatrix() {
   System.out.println("RowPath: " + this.rowPath);
   Iterator<MatrixSlice> iterator = this.iterateAll();
   int count = 0;
   while (iterator.hasNext()) {
     MatrixSlice slice = iterator.next();
     Vector v = slice.vector();
     int size = v.size();
     for (int i = 0; i < size; i++) {
       Element e = v.getElement(i);
       count++;
       System.out.print(e.get() + " ");
     }
     System.out.println();
   }
   return count;
 }
 @Test
 public void testEigen() {
   double[] evals = {
     0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 2.0e-7, 0.0, 0.0, -2.0e-7, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0
   };
   int i = 0;
   Matrix a = new DenseMatrix(4, 4);
   for (MatrixSlice row : a) {
     for (Vector.Element element : row.vector()) {
       element.set(evals[i++]);
     }
   }
   EigenDecomposition eig = new EigenDecomposition(a);
   Matrix d = eig.getD();
   Matrix v = eig.getV();
   check("EigenvalueDecomposition (nonsymmetric)...", a.times(v), v.times(d));
 }
  private void prepareEigens(Configuration conf, Path eigenInput, boolean inMemory) {
    DistributedRowMatrix eigens = new DistributedRowMatrix(eigenInput, tmpOut, 1, 1);
    eigens.setConf(conf);
    if (inMemory) {
      List<Vector> eigenVectors = Lists.newArrayList();
      for (MatrixSlice slice : eigens) {
        eigenVectors.add(slice.vector());
      }
      eigensToVerify =
          new SparseRowMatrix(
              eigenVectors.size(),
              eigenVectors.get(0).size(),
              eigenVectors.toArray(new Vector[eigenVectors.size()]),
              true,
              true);

    } else {
      eigensToVerify = eigens;
    }
  }
  private void saveCleanEigens(
      Configuration conf, Collection<Map.Entry<MatrixSlice, EigenStatus>> prunedEigenMeta)
      throws IOException {
    Path path = new Path(outPath, CLEAN_EIGENVECTORS);
    FileSystem fs = FileSystem.get(path.toUri(), conf);
    SequenceFile.Writer seqWriter =
        new SequenceFile.Writer(fs, conf, path, IntWritable.class, VectorWritable.class);
    try {
      IntWritable iw = new IntWritable();
      int numEigensWritten = 0;
      int index = 0;
      for (Map.Entry<MatrixSlice, EigenStatus> pruneSlice : prunedEigenMeta) {
        MatrixSlice s = pruneSlice.getKey();
        EigenStatus meta = pruneSlice.getValue();
        EigenVector ev =
            new EigenVector(
                s.vector(), meta.getEigenValue(), Math.abs(1 - meta.getCosAngle()), s.index());
        // log.info("appending {} to {}", ev, path);
        Writable vw = new VectorWritable(ev);
        iw.set(index++);
        seqWriter.append(iw, vw);

        // increment the number of eigenvectors written and see if we've
        // reached our specified limit, or if we wish to write all eigenvectors
        // (latter is built-in, since numEigensWritten will always be > 0
        numEigensWritten++;
        if (numEigensWritten == maxEigensToKeep) {
          log.info(
              "{} of the {} total eigens have been written",
              maxEigensToKeep,
              prunedEigenMeta.size());
          break;
        }
      }
    } finally {
      Closeables.close(seqWriter, false);
    }
    cleanedEigensPath = path;
  }
  @Test
  public void testSequential() {
    int validld = 3;
    Matrix A = new DenseMatrix(validld, validld);
    double[] columnwise = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0};
    int i = 0;
    for (MatrixSlice row : A) {
      for (Vector.Element element : row.vector()) {
        element.set(columnwise[i++]);
      }
    }

    EigenDecomposition Eig = new EigenDecomposition(A);
    Matrix D = Eig.getD();
    Matrix V = Eig.getV();
    check("EigenvalueDecomposition (nonsymmetric)...", A.times(V), V.times(D));

    A = A.transpose().times(A);
    Eig = new EigenDecomposition(A);
    D = Eig.getD();
    V = Eig.getV();
    check("EigenvalueDecomposition (symmetric)...", A.times(V), V.times(D));
  }