public bool process(WatchedDoubleStepQREigen_FDRM imp, FMatrixRMaj A, FMatrixRMaj Q_h)
        {
            this._implicit = imp;

            if (N != A.numRows)
            {
                N               = A.numRows;
                Q               = new FMatrixRMaj(N, N);
                splits          = new int[N];
                origEigenvalues = new Complex_F32[N];
                eigenvectors    = new FMatrixRMaj[N];
                eigenvectorTemp = new FMatrixRMaj(N, 1);

                solver = LinearSolverFactory_FDRM.linear(0);
            }
            else
            {
//            UtilEjml.setnull(eigenvectors);
                eigenvectors = new FMatrixRMaj[N];
            }
            Array.Copy(_implicit.eigenvalues, 0, origEigenvalues, 0, N);

            _implicit.setup(A);
            _implicit.setQ(Q);
            numSplits = 0;
            onscript  = true;

//        Console.WriteLine("Orig A");
//        A.print("%12.10ff");

            if (!findQandR())
            {
                return(false);
            }

            return(extractVectors(Q_h));
        }
 public WatchedDoubleStepQREigenvalue_FDRM()
 {
     implicitQR = new WatchedDoubleStepQREigen_FDRM();
 }