code: public boolean process( DMatrixSparseCSC A ) {
          init(A);
  
          TriangularSolver_DSCC.eliminationTree(A,true,parent,gwork);
  
          countNonZeroInR(parent);
          countNonZeroInV(parent);
  
          // if more columns than rows it's possible that Q*R != A. That's because a householder
          // would need to be created that's outside the  m by m Q matrix. In reality it has
          // a partial solution. Column pivot are needed.
          if( m < n ) {
              for (int row = 0; row <m; row++) {
                  if( gwork.data[head+row] < 0 ) {
                      return false;
                  }
              }
          }
          return true;
      }
docs: Examins the structure of A for QR decomposition
  @param A matrix which is to be decomposed
  @return true if the solution is valid or false if the decomposition can't be performed (i.e. requires column pivots)