code: public EVD factor(DenseMatrix A) throws NotConvergedException {
          if (!A.isSquare())
              throw new IllegalArgumentException("!A.isSquare()");
          else if (A.numRows() != n)
              throw new IllegalArgumentException("A.numRows() != n");
  
          intW info = new intW(0);
          LAPACK.getInstance().dgeev(jobLeft.netlib(), jobRight.netlib(), n,
                  A.getData(), Matrices.ld(n), Wr, Wi,
                  jobLeft == JobEig.All ? Vl.getData() : new double[0],
                  Matrices.ld(n),
                  jobRight == JobEig.All ? Vr.getData() : new double[0],
                  Matrices.ld(n), work, work.length, info);
  
          if (info.val > 0)
              throw new NotConvergedException(
                      NotConvergedException.Reason.Iterations);
          else if (info.val < 0)
              throw new IllegalArgumentException();
  
          return this;
      }
docs: Computes the eigenvalue decomposition of the given matrix
  
  @param A
  Matrix to factorize. Overwritten on return
  @return The current decomposition
  @throws NotConvergedException