Running ‘Class+Meth.R’ [2s/4s]
  Running ‘Simple.R’ [7s/11s]
  Running ‘abIndex-tsts.R’ [3s/5s]
  Running ‘base-matrix-fun.R’ [2s/3s]
  Running ‘bind.R’ [2s/4s]
  Comparing ‘bind.Rout’ to ‘bind.Rout.save’ ... OK
  Running ‘dg_Matrix.R’ [2s/3s]
  Running ‘dpo-test.R’ [4s/7s]
  Running ‘dtpMatrix.R’ [2s/3s]
  Running ‘factorizing.R’ [6s/9s]
  Running ‘group-methods.R’ [4s/7s]
  Running ‘indexing.R’ [12s/19s]
  Comparing ‘indexing.Rout’ to ‘indexing.Rout.save’ ... OK
  Running ‘matprod.R’ [9s/15s]
  Running ‘matr-exp.R’ [2s/3s]
  Running ‘other-pkgs.R’ [2s/2s]
  Running ‘spModel.matrix.R’ [3s/5s]
  Running ‘validObj.R’ [4s/9s]
  Running ‘write-read.R’ [2s/3s]
Running the tests in ‘tests/factorizing.R’ failed.
Complete output:
  > #### Matrix Factorizations  --- of all kinds
  > 
  > library(Matrix)
  > 
  > source(system.file("test-tools.R", package = "Matrix"))# identical3() etc
  Loading required package: tools
  > doExtras
  [1] FALSE
  > (is64bit <- .Machine$sizeof.pointer == 8)
  [1] TRUE
  > ### "sparseQR" : Check consistency of methods
  > ##   --------
  > data(KNex); mm <- KNex$mm; y <- KNex$y
  > stopifnot(is((Y <- Matrix(y)), "dgeMatrix"))
  > md <- as(mm, "matrix")                  # dense
  > 
  > (cS <- system.time(Sq <- qr(mm))) # 0.009
     user  system elapsed 
    0.005   0.000   0.005 
  > (cD <- system.time(Dq <- qr(md))) # 0.499 (lynne, 2014 f); 1.04 lynne 2019 ?????
     user  system elapsed 
    0.525   0.013   1.074 
  > cD[1] / cS[1] # dense is  much ( ~ 100--170 times) slower
  user.self 
        105 
  > 
  > ## chkQR() in ../inst/test-tools-1.R ;
  > 
  > if(doExtras) { ## ~ 20 sec {"large" example}   + 2x qr.R() warnings
  +     cat("chkQR( <KNex> ) .. takes time .. ")
  +     system.time(chkQR(mm, y=y, a.qr = Sq, verbose=TRUE))
  +     system.time(chkQR(md, y=y, a.qr = Dq, verbose=TRUE))
  +     cat(" done: [Ok]\n")
  + }
  > 
  > ## consistency of results dense and sparse
  > ##	chk.qr.D.S() and  checkQR.DS.both() >>> ../inst/test-tools-Matrix.R
  > chk.qr.D.S(Dq, Sq, y, Y)
  > 
  > ## Another small example with pivoting (and column name "mess"):
  > suppressWarnings(RNGversion("3.5.0")); set.seed(1)
  > X <- rsparsematrix(9,5, 1/4, dimnames=list(paste0("r", 1:9), LETTERS[1:5]))
  > qX <- qr(X); qd <- qr(as(X, "matrix"))
  > ## are the same (now, *including* names):
  > assert.EQ(print(qr.coef(qX, 1:9)), qr.coef(qd, 1:9), tol=1e-14)
            A           B           C           D           E 
    1.2056600  -6.1033750 -20.4434698 -10.1046230  -0.9090909 
  > if(FALSE) ## error: (FIXME ?)
  + chk.qr.D.S(d. = qd, s. = qX, y = 1:9)
  > 
  > 
  > 
  > ## rank deficient QR cases: ---------------
  > 
  > ## From Simon (15 Jul 2009) + dimnames (11 May 2015)
  > set.seed(10)
  > a <- matrix(round(10 * runif(90)), 10,9, dimnames =
  +             list(LETTERS[1:10], paste0("c", 1:9)))
  > a[a < 7.5] <- 0
  > (A <- Matrix(a))# first column = all zeros
  10 x 9 sparse Matrix of class "dgCMatrix"
    c1 c2 c3 c4 c5 c6 c7 c8 c9
  A  .  .  9  .  .  .  .  .  9
  B  .  .  .  .  .  9  .  .  .
  C  .  .  8  .  .  .  .  .  .
  D  .  .  .  9  .  .  .  .  .
  E  .  .  .  .  .  .  8  .  .
  F  .  .  .  .  .  .  8  .  .
  G  .  .  8  8  .  .  .  .  8
  H  .  .  . 10  .  .  . 10  .
  I  .  .  8  .  .  .  .  .  .
  J  .  8  .  .  8  .  .  .  .
  > qD <- chkQR(a, giveRE=TRUE) ## using base qr
  Mean relative difference: 2.049643e-16
  Mean relative difference: 2.960595e-16
  Mean relative difference: 5.200024e-16
  Mean relative difference: 7.869001e-16
  Mean relative difference: 5.200024e-16
  Mean relative difference: 8.396308e-16
  > qS <- chkQR(A, giveRE=TRUE) ## using Matrix "sparse qr" -- "structurally rank deficient!
  is sparse *structurally* rank deficient:  Qinv.chk=FALSE, QtQ.chk=FALSE
  Mean relative difference: 6.18072e-16
  Mean relative difference: 6.18072e-16
  Warning messages:
  1: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In .local(qr, complete, ...) :
    qr.R(<sparse>) may differ from qr.R(<dense>) because of permutations.  Possibly use our qrR() instead
  3: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  4: In .local(qr, complete, ...) :
    qr.R(<sparse>) may differ from qr.R(<dense>) because of permutations.  Possibly use our qrR() instead
  > validObject(qS)# with the validity now (2012-11-18) -- ok, also for "bad" case
  [1] TRUE
  > ## Here, have illegal access  Up[-1] in ../src/cs.c
  > try( ## After patch (2016-10-04 - *NOT* committed), this fails
  +     ## definitely "fails" (with good singularity message) after c3194 (cs.c):
  + chk.qr.D.S(qD, qS, y = 10 + 1:nrow(A), force=TRUE)# 6 warnings: "structurally rank deficient"
  + )
  Error in chk.qr.D.S(qD, qS, y = 10 + 1:nrow(A), force = TRUE) : 
    is.all.equal3(unname(cc), drop(qr.coef(s., y)), drop(qr.coef(s.,  .... is not TRUE
  In addition: Warning message:
  In lengths(res@Dimnames) :
    sparseQR_coef(): structurally rank deficient case: possibly WRONG zeros
  > try( ## NOTE: *Both* checks  currently fail here:
  +     chkQR(A, Qinv.chk=TRUE, QtQ.chk=TRUE)
  + )
  Error in assert.EQ(drop(qr.qy(a.qr, qr.qty(a.qr, y))), y, giveRE = giveRE,  : 
    all.equal() |-> Mean relative difference: 0.2131411
  In addition: Warning messages:
  1: In qr.qty(a.qr, y) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In qr.qy(a.qr, qr.qty(a.qr, y)) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > 
  > 
  > ## Larger Scale random testing
  > oo <- options(Matrix.quiet.qr.R = TRUE, Matrix.verbose = TRUE)
  > set.seed(101)
  > 
  > for(N in 1:(if(doExtras) 1008 else 24)) {
  +     A <- rsparsematrix(8,5, nnz = rpois(1, lambda=16))
  +     cat(sprintf("%4d -", N))
  +     checkQR.DS.both(A, Qinv.chk= NA, QtQ.chk=NA,
  +     ##                          --- => FALSE if struct. rank deficient
  + 		    giveRE = FALSE, tol = if(is64bit) 2e-13 else 1e-12)
  + }
     1 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     2 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     3 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     4 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     5 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 2)
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     6 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     7 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     8 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     9 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    10 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    11 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    12 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    13 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    14 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    15 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    16 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    17 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    18 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    19 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    20 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    21 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    22 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    23 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    24 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
  There were 14 warnings (use warnings() to see them)
  > unique(warnings())
  Warning message:
  In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > 
  > ## Look at single "hard" cases: --------------------------------------
  > 
  > ## This is *REALLY* nice and small :
  > A0 <- new("dgCMatrix", Dim = 4:3, i = c(0:3, 3L), p = c(0L, 3:5), x = rep(1,5))
  > A0
  4 x 3 sparse Matrix of class "dgCMatrix"
            
  [1,] 1 . .
  [2,] 1 . .
  [3,] 1 . .
  [4,] . 1 1
  > checkQR.DS.both(A0, Qinv.chk = FALSE, QtQ.chk=FALSE)
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 2.220446e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 1.110223e-16
  Mean relative difference: 2.775558e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 1.110223e-16
  Mean relative difference: 3.191891e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 1.110223e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 1.110223e-16
  [Ok]
  Warning messages:
  1: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > ##                                           ----- *both* still needed :
  > try( checkQR.DS.both(A0,  TRUE, FALSE) )
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 2.220446e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 1.110223e-16
  Mean relative difference: 2.775558e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 1.110223e-16
  Mean relative difference: 3.191891e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Error in assert.EQ(drop(qr.qy(a.qr, qr.qty(a.qr, y))), y, giveRE = giveRE,  : 
    all.equal() |-> Mean relative difference: 0.09622504
  In addition: Warning messages:
  1: In qr.qty(a.qr, y) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In qr.qy(a.qr, qr.qty(a.qr, y)) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > try( checkQR.DS.both(A0, FALSE,  TRUE) )
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 2.220446e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 1.110223e-16
  Mean relative difference: 2.775558e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 1.110223e-16
  Mean relative difference: 3.191891e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 1.110223e-16
  Error in assert.EQ(MM, m, tol = tol, showOnly = showOnly, giveRE = giveRE) : 
    all.equal() |-> Mean relative difference: 1
  In addition: Warning message:
  In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > 
  > ## and the same when dropping the first row  { --> 3 x 3 }:
  > A1 <- A0[-1 ,]
  > checkQR.DS.both(A1, Qinv.chk = FALSE, QtQ.chk=FALSE)
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 4.440892e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 4.440892e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 4.440892e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
  Warning messages:
  1: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > ##                                           ----- *both* still needed :
  > try( checkQR.DS.both(A1,  TRUE, FALSE) )
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 4.440892e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 4.440892e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 4.440892e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Error in assert.EQ(drop(qr.qy(a.qr, qr.qty(a.qr, y))), y, giveRE = giveRE,  : 
    all.equal() |-> Mean relative difference: 0.3333333
  In addition: Warning messages:
  1: In qr.qty(a.qr, y) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In qr.qy(a.qr, qr.qty(a.qr, y)) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > try( checkQR.DS.both(A1, FALSE,  TRUE) )
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 4.440892e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 4.440892e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 4.440892e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  Error in assert.EQ(MM, m, tol = tol, showOnly = showOnly, giveRE = giveRE) : 
    all.equal() |-> Mean relative difference: 1
  In addition: Warning message:
  In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > 
  > 
  > qa <- qr(as(A0,"matrix"))
  > qA <- qr(A0) # -> message: ".. Matrix structurally rank deficient"
  Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  > 
  > drop0(crossprod( Qd <- qr.Q(qa) ), 1e-15) # perfect = diag( 3 )
  3 x 3 sparse Matrix of class "dgCMatrix"
            
  [1,] 1 . .
  [2,] . 1 .
  [3,] . . 1
  > drop0(crossprod( Qs <- qr.Q(qA) ), 1e-15) # R[3,3] == 0 -- OOPS!
  3 x 3 sparse Matrix of class "dsCMatrix"
            
  [1,] 1 . .
  [2,] . 1 .
  [3,] . . .
  Warning message:
  In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > ## OTOH, qr.R() is fine, as checked in the checkQR.DS.both(A0, *) above
  > 
  > 
  > ## zero-row *and* zero-column :
  > (A2 <- new("dgCMatrix", i = c(0L, 1L, 4L, 7L, 5L, 2L, 4L)
  +            , p = c(0L, 3L, 4L, 4L, 5L, 7L)
  +            , Dim = c(8L, 5L)
  +            , x = c(0.92, 1.06, -1.74, 0.74, 0.19, -0.63, 0.68)))
  8 x 5 sparse Matrix of class "dgCMatrix"
                              
  [1,]  0.92 .    . .     .   
  [2,]  1.06 .    . .     .   
  [3,]  .    .    . .    -0.63
  [4,]  .    .    . .     .   
  [5,] -1.74 .    . .     0.68
  [6,]  .    .    . 0.19  .   
  [7,]  .    .    . .     .   
  [8,]  .    0.74 . .     .   
  > checkQR.DS.both(A2, Qinv.chk = FALSE, QtQ.chk=FALSE)
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 8.881784e-16
  Mean relative difference: 2.960595e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 1.561251e-16
  Mean relative difference: 7.21645e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 1.561251e-16
  Mean relative difference: 9.992007e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 6.637203e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 6.637203e-16
  [Ok]
  Warning messages:
  1: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > ##                                           ----- *both* still needed :
  > try( checkQR.DS.both(A2,  TRUE, FALSE) )
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 8.881784e-16
  Mean relative difference: 2.960595e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 1.561251e-16
  Mean relative difference: 7.21645e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 1.561251e-16
  Mean relative difference: 9.992007e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Error in assert.EQ(drop(qr.qy(a.qr, qr.qty(a.qr, y))), y, giveRE = giveRE,  : 
    all.equal() |-> Mean relative difference: 0.875
  In addition: Warning messages:
  1: In qr.qty(a.qr, y) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In qr.qy(a.qr, qr.qty(a.qr, y)) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > try( checkQR.DS.both(A2, FALSE,  TRUE) )
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 8.881784e-16
  Mean relative difference: 2.960595e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 1.561251e-16
  Mean relative difference: 7.21645e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 1.561251e-16
  Mean relative difference: 9.992007e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 6.637203e-16
  Error in assert.EQ(MM, m, tol = tol, showOnly = showOnly, giveRE = giveRE) : 
    all.equal() |-> Mean absolute difference: 0.3333333
  In addition: Warning message:
  In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > 
  > 
  > ## Case of *NO* zero-row or zero-column:
  > (A3 <- new("dgCMatrix", Dim = 6:5
  +            , i = c(0L, 2L, 4L, 0L, 1L, 5L, 1L, 3L, 0L)
  +            , p = c(0L, 1L, 3L, 6L, 8L, 9L)
  +            , x = c(40, -54, -157, -28, 75, 166, 134, 3, -152)))
  6 x 5 sparse Matrix of class "dgCMatrix"
                           
  [1,] 40    . -28   . -152
  [2,]  .    .  75 134    .
  [3,]  .  -54   .   .    .
  [4,]  .    .   .   3    .
  [5,]  . -157   .   .    .
  [6,]  .    . 166   .    .
  > checkQR.DS.both(A3, Qinv.chk = FALSE, QtQ.chk=FALSE)
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 4.144833e-16
  Mean relative difference: 5.551115e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 9.895033e-16
  Mean relative difference: 6.369445e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 9.895033e-16
  Mean relative difference: 7.043786e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 1.143119e-15
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 1.143119e-15
  [Ok]
  Warning messages:
  1: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > ##                                           ----- *both* still needed :
  > try( checkQR.DS.both(A3,  TRUE, FALSE) )
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 4.144833e-16
  Mean relative difference: 5.551115e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 9.895033e-16
  Mean relative difference: 6.369445e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 9.895033e-16
  Mean relative difference: 7.043786e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Error in assert.EQ(drop(qr.qy(a.qr, qr.qty(a.qr, y))), y, giveRE = giveRE,  : 
    all.equal() |-> Mean relative difference: 0.2579847
  In addition: Warning messages:
  1: In qr.qty(a.qr, y) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In qr.qy(a.qr, qr.qty(a.qr, y)) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > try( checkQR.DS.both(A3, FALSE,  TRUE) )
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 4.144833e-16
  Mean relative difference: 5.551115e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 9.895033e-16
  Mean relative difference: 6.369445e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 9.895033e-16
  Mean relative difference: 7.043786e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 1.143119e-15
  Error in assert.EQ(MM, m, tol = tol, showOnly = showOnly, giveRE = giveRE) : 
    all.equal() |-> Mean relative difference: 0.3333333
  In addition: Warning message:
  In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > 
  > 
  > 
  > (A4 <- new("dgCMatrix", Dim = c(7L, 5L)
  +            , i = c(1:2, 4L, 6L, 1L, 5L, 0:3, 0L, 2:4)
  +            , p = c(0L, 4L, 6L, 10L, 10L, 14L)
  +            , x = c(9, -8, 1, -9, 1, 10, -1, -2, 6, 14, 10, 2, 12, -9)))
  7 x 5 sparse Matrix of class "dgCMatrix"
                    
  [1,]  .  . -1 . 10
  [2,]  9  1 -2 .  .
  [3,] -8  .  6 .  2
  [4,]  .  . 14 . 12
  [5,]  1  .  . . -9
  [6,]  . 10  . .  .
  [7,] -9  .  . .  .
  > checkQR.DS.both(A4, Qinv.chk = FALSE, QtQ.chk=FALSE)
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 3.806479e-16
  Mean relative difference: 5.181041e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 9.206466e-16
  Mean relative difference: 5.230191e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 9.206466e-16
  Mean relative difference: 7.227292e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 4.234339e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 4.234339e-16
  [Ok]
  Warning messages:
  1: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > ##                                           ----- *both* still needed :
  > try( checkQR.DS.both(A4,  TRUE, FALSE) )
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 3.806479e-16
  Mean relative difference: 5.181041e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 9.206466e-16
  Mean relative difference: 5.230191e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 9.206466e-16
  Mean relative difference: 7.227292e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Error in assert.EQ(drop(qr.qy(a.qr, qr.qty(a.qr, y))), y, giveRE = giveRE,  : 
    all.equal() |-> Mean relative difference: 0.3289631
  In addition: Warning messages:
  1: In qr.qty(a.qr, y) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In qr.qy(a.qr, qr.qty(a.qr, y)) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > try( checkQR.DS.both(A4, FALSE,  TRUE) )
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 3.806479e-16
  Mean relative difference: 5.181041e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 9.206466e-16
  Mean relative difference: 5.230191e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 9.206466e-16
  Mean relative difference: 7.227292e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 4.234339e-16
  Error in assert.EQ(MM, m, tol = tol, showOnly = showOnly, giveRE = giveRE) : 
    all.equal() |-> Mean relative difference: 0.3333333
  In addition: Warning message:
  In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > 
  > (A5 <- new("dgCMatrix", Dim = c(4L, 4L)
  +            , i = c(2L, 2L, 0:1, 0L, 2:3), p = c(0:2, 4L, 7L)
  +            , x = c(48, 242, 88, 18, -167, -179, 18)))
  4 x 4 sparse Matrix of class "dgCMatrix"
                     
  [1,]  .   . 88 -167
  [2,]  .   . 18    .
  [3,] 48 242  . -179
  [4,]  .   .  .   18
  > checkQR.DS.both(A5, Qinv.chk = FALSE, QtQ.chk=FALSE)
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 3.172066e-16
  Mean relative difference: 3.552714e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 2.732857e-16
  Mean relative difference: 3.978299e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 2.732857e-16
  Mean relative difference: 3.978299e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  Mean absolute difference: 7.105427e-15
  complete = TRUE: checking  X = Q R P*
  Mean absolute difference: 7.105427e-15
  [Ok]
  Warning messages:
  1: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > ##                                           ----- *both* still needed :
  > try( checkQR.DS.both(A5,  TRUE, FALSE) )
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 3.172066e-16
  Mean relative difference: 3.552714e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 2.732857e-16
  Mean relative difference: 3.978299e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 2.732857e-16
  Mean relative difference: 3.978299e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Error in assert.EQ(drop(qr.qy(a.qr, qr.qty(a.qr, y))), y, giveRE = giveRE,  : 
    all.equal() |-> Mean relative difference: 0.6884769
  In addition: Warning messages:
  1: In qr.qty(a.qr, y) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In qr.qy(a.qr, qr.qty(a.qr, y)) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > try( checkQR.DS.both(A5, FALSE,  TRUE) )
  classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  Mean relative difference: 3.172066e-16
  Mean relative difference: 3.552714e-16
  complete = FALSE: checking  X = Q R P*
  Mean relative difference: 2.732857e-16
  Mean relative difference: 3.978299e-16
  complete = TRUE: checking  X = Q R P*
  Mean relative difference: 2.732857e-16
  Mean relative difference: 3.978299e-16
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  Mean absolute difference: 7.105427e-15
  Error in assert.EQ(MM, m, tol = tol, showOnly = showOnly, giveRE = giveRE) : 
    all.equal() |-> Mean relative difference: 1
  In addition: Warning message:
  In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > 
  > 
  > for(N in 1:(if(doExtras) 2^12 else 128)) {
  +     A <- round(100*rsparsematrix(5,3, nnz = min(15,rpois(1, lambda=10))))
  +     if(any(apply(A, 2, function(x) all(x == 0)))) ## "column of all 0"
  +         next
  +     cat(sprintf("%4d -", N))
  +     checkQR.DS.both(A, Qinv.chk=NA, giveRE=FALSE, tol = 1e-12)
  +     ##                         --- => FALSE if struct. rank deficient
  + }
     1 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     2 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     3 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     4 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     5 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     6 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     7 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     8 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
     9 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    10 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    11 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    12 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    13 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    14 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    15 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    16 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    17 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    18 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    19 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    21 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    22 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    24 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    25 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    26 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    28 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    29 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    30 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    31 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    32 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    34 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    35 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    37 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    38 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    39 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    40 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    41 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    42 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    43 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    44 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    45 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    46 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    47 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    48 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    49 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    50 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    51 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    52 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    53 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    54 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    55 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    56 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    57 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    58 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    59 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    60 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    61 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    62 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    63 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    64 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    65 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    66 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    67 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    68 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    69 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    70 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    71 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    72 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    73 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    74 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    75 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    76 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    77 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    78 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    79 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    80 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    81 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    82 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    83 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    84 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    85 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    86 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    87 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    88 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    89 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    90 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    91 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    92 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    93 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    94 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    95 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    96 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    97 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    98 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
    99 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   100 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   101 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   102 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   103 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   104 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Symbolic QR(): Matrix structurally rank deficient (m2-m = 1)
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   105 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   106 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   107 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   108 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   109 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   110 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   111 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   112 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   113 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   114 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   115 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   116 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   117 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   118 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   119 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   120 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   121 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   122 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   123 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   124 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   126 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   127 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
   128 -classical: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok] ---  sparse: Qinv.chk=TRUE: checking   Q'Q y = y = QQ' y :
  complete = FALSE: checking  X = Q R P*
  complete = TRUE: checking  X = Q R P*
  [Ok]
  Warning messages:
  1: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  2: In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > 
  > unique(warnings())
  Warning message:
  In qr.qy(qr, D) :
    sparseQR_qty(): structurally rank deficient case: possibly WRONG zeros
  > 
  > 
  > options(oo)
  > 
  > 
  > 
  > ### "denseLU"
  > 
  > ## Testing expansions of factorizations {was ./expand.R, then in simple.R }
  > ## new: [m x n]  where m and n  may differ
  > x. <- c(2^(0:5),9:1,-3:8, round(sqrt(0:16)))
  > set.seed(1)
  > for(nnn in 1:100) {
  +     y <- sample(x., replace=TRUE)
  +     m <- sample(2:6, 1)
  +     n <- sample(2:7, 1)
  +     x <- suppressWarnings(matrix(y, m,n))
  +     lux <- lu(x)# occasionally a warning about exact singularity
  +     xx <- with(expand(lux), (P %*% L %*% U))
  +     print(dim(xx))
  +     assert.EQ.mat(xx, x, tol = 16*.Machine$double.eps)
  + }
  [1] 4 6
  [1] 3 2
  [1] 4 5
  [1] 6 5
  [1] 4 7
  [1] 3 3
  [1] 5 3
  [1] 2 6
  [1] 5 6
  [1] 5 2
  [1] 4 7
  [1] 6 5
  Error in matrix(y, m, n) : 
    data length differs from size of matrix: [44 != 4 x 4]
  Execution halted