Running '0_pt-ex.R' [2s]
  Running 'ex1.R' [6s]
  Running 'ex2-long.R' [6s]
  Running 'ex3.R' [2s]
  Comparing 'ex3.Rout' to 'ex3.Rout.save' ...15,16c15,16
< Warning messages:
< 1: In cobs(weight, height, knots = weight, nknots = length(weight)) :
---
> Warning message:
> In cobs(weight, height, knots = weight, nknots = length(weight)) :
19,20d18
< 2: In cobs(weight, height, knots = weight, nknots = length(weight)) :
<   drqssbc2(): Not all flags are normal (== 1), ifl : 18
  Running 'multi-constr.R' [3s]
  Running 'roof.R' [3s]
  Comparing 'roof.Rout' to 'roof.Rout.save' ... OK
  Running 'small-ex.R' [2s]
  Comparing 'small-ex.Rout' to 'small-ex.Rout.save' ...24,25d23
< Warning message:
< In cobs(x, y) : drqssbc2(): Not all flags are normal (== 1), ifl : 18
  Running 'spline-ex.R' [2s]
  Comparing 'spline-ex.Rout' to 'spline-ex.Rout.save' ... OK
  Running 'temp.R' [3s]
  Comparing 'temp.Rout' to 'temp.Rout.save' ...445,446d444
< Warning in cobs(year, temp, knots.add = TRUE, degree = 1, constraint = "none",  :
<   The algorithm has not converged after 100 iterations
456,457d453
< Warning in cobs(year, temp, nknots = 9, knots.add = TRUE, degree = 1, constraint = "none",  :
<   The algorithm has not converged after 100 iterations
463,464c459,460
< coef[1:5]: -0.39324840, -0.28115087,  0.05916295, -0.07465159,  0.31227753
< R^2 = 73.22% ;  empirical tau (over all): 63/113 = 0.5575221 (target tau= 0.5)
---
> coef[1:5]: -0.40655906, -0.31473700,  0.05651823, -0.05681818,  0.28681956
> R^2 = 72.56% ;  empirical tau (over all): 54/113 = 0.4778761 (target tau= 0.5)
470,473d465
< 
<  **** ERROR in algorithm: ifl = 18
< 
< 
476,478d467
< Warning message:
< In cobs(year, temp, nknots = length(a50$knots), knots = a50$knot,  :
<   drqssbc2(): Not all flags are normal (== 1), ifl : 18
481,482d469
< Warning in cobs(year, temp, nknots = length(a50$knots), knots = a50$knot,  :
<   The algorithm has not converged after 100 iterations
488,490c475
<  [1]   1   2   9  10  17  18  20  21  22  23  26  27  35  36  42  47  48  49  52
< [20]  53  58  59  61  62  63  64  65  68  73  74  78  79  80  81  82  83  84  88
< [39]  90  91  94  98 100 101 102 104 108 109 111 112
---
>  [1]  10  18  21  22  47  61  68  74  78  79 102 111
492,495c477
<  [1]   3   4   5   6   7   8  11  12  13  14  15  16  19  24  25  28  29  30  31
< [20]  32  33  34  37  38  39  40  41  43  44  45  46  50  51  54  55  56  57  60
< [39]  66  67  69  70  71  72  75  76  77  85  86  87  89  92  93  95  96  97  99
< [58] 103 105 106 107 110 113
---
>  [1]   5   8  25  38  39  50  54  77  85  97 113
  Running 'wind.R' [8s]
Running the tests in 'tests/multi-constr.R' failed.
Complete output:
  > #### Examples which use the new feature of more than one 'constraint'.
  > 
  > suppressMessages(library(cobs))
  > 
  > ## do *not* show platform info here (as have *.Rout.save), but in 0_pt-ex.R
  > options(digits = 6)
  > 
  > if(!dev.interactive(orNone=TRUE)) pdf("multi-constr.pdf")
  > 
  > source(system.file("util.R", package = "cobs"))
  > source(system.file(package="Matrix", "test-tools-1.R", mustWork=TRUE))
  Loading required package: tools
  > ##--> tryCatch.W.E(), showProc.time(), assertError(), relErrV(), ...
  >  Lnx  <- Sys.info()[["sysname"]] == "Linux"
  > isMac <- Sys.info()[["sysname"]] == "Darwin"
  > x86 <- (arch <- Sys.info()[["machine"]]) == "x86_64"
  > noLdbl <- (.Machine$sizeof.longdouble <= 8) ## TRUE when --disable-long-double
  > ## IGNORE_RDIFF_BEGIN
  > Sys.info()
         sysname        release        version       nodename        machine 
       "Windows"   "Server x64"  "build 20348"     "CRANWIN3"       "x86-64" 
           login           user effective_user        udomain 
          "CRAN"         "CRAN"         "CRAN"     "CRANWIN3" 
  > noLdbl
  [1] FALSE
  > ## IGNORE_RDIFF_END
  > 
  > 
  > Rsq <- function(obj) {
  +     stopifnot(inherits(obj, "cobs"), is.numeric(res <- obj$resid))
  +     1 - sum(res^2)/obj$SSy
  + }
  > list_ <- function (...) `names<-`(list(...), vapply(sys.call()[-1L], as.character, ""))
  > is.cobs <- function(x) inherits(x, "cobs")
  > 
  > set.seed(908)
  > x <- seq(-1,2, len = 50)
  > f.true <- pnorm(2*x)
  > y <- f.true + rnorm(50)/10
  > plot(x,y); lines(x, f.true, col="gray", lwd=2, lty=3)
  > 
  > ## constraint on derivative at right end:
  > (con <- rbind(c(2 , max(x), 0))) # f'(x_n) == 0
       [,1] [,2] [,3]
  [1,]    2    2    0
  > 
  > ## Using 'trace = 3' --> 'trace = 2' inside drqssbc2()
  > 
  > ## Regression splines (lambda = 0)
  > c2   <- cobs(x,y, trace = 3)
  qbsks2():
   Performing general knot selection ...
  loo.design2(): ->  Xeq   50 x 3 (nz = 150 =^=     1%) 
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
  loo.design2(): ->  Xeq   50 x 5 (nz = 150 =^=   0.6%) 
  loo.design2(): ->  Xeq   50 x 6 (nz = 150 =^=   0.5%) 
  loo.design2(): ->  Xeq   50 x 7 (nz = 150 =^=  0.43%) 
  
   Deleting unnecessary knots ...
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
  loo.design2(): ->  Xeq   50 x 3 (nz = 150 =^=     1%) 
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
  Warning message:
  In cobs(x, y, trace = 3) :
    drqssbc2(): Not all flags are normal (== 1), ifl : 18
  > c2i  <- cobs(x,y, constraint = c("increase"), trace = 3)
  qbsks2():
   Performing general knot selection ...
  loo.design2(): ->  Xeq   50 x 3 (nz = 150 =^=     1%) 
                    Xieq    2 x 3 (nz = 6 =^=     1%) 
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
                    Xieq    3 x 4 (nz = 9 =^=  0.75%) 
  loo.design2(): ->  Xeq   50 x 5 (nz = 150 =^=   0.6%) 
                    Xieq    4 x 5 (nz = 12 =^=   0.6%) 
  loo.design2(): ->  Xeq   50 x 6 (nz = 150 =^=   0.5%) 
                    Xieq    5 x 6 (nz = 15 =^=   0.5%) 
  loo.design2(): ->  Xeq   50 x 7 (nz = 150 =^=  0.43%) 
                    Xieq    6 x 7 (nz = 18 =^=  0.43%) 
  
   Deleting unnecessary knots ...
  loo.design2(): ->  Xeq   50 x 5 (nz = 150 =^=   0.6%) 
                    Xieq    4 x 5 (nz = 12 =^=   0.6%) 
  loo.design2(): ->  Xeq   50 x 5 (nz = 150 =^=   0.6%) 
                    Xieq    4 x 5 (nz = 12 =^=   0.6%) 
  loo.design2(): ->  Xeq   50 x 5 (nz = 150 =^=   0.6%) 
                    Xieq    4 x 5 (nz = 12 =^=   0.6%) 
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
                    Xieq    3 x 4 (nz = 9 =^=  0.75%) 
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
                    Xieq    3 x 4 (nz = 9 =^=  0.75%) 
  loo.design2(): ->  Xeq   50 x 5 (nz = 150 =^=   0.6%) 
                    Xieq    4 x 5 (nz = 12 =^=   0.6%) 
  > c2c  <- cobs(x,y, constraint = c("concave"), trace = 3)
  qbsks2():
   Performing general knot selection ...
  loo.design2(): ->  Xeq   50 x 3 (nz = 150 =^=     1%) 
                    Xieq    1 x 3 (nz = 3 =^=     1%) 
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
                    Xieq    2 x 4 (nz = 6 =^=  0.75%) 
  loo.design2(): ->  Xeq   50 x 5 (nz = 150 =^=   0.6%) 
                    Xieq    3 x 5 (nz = 9 =^=   0.6%) 
  loo.design2(): ->  Xeq   50 x 6 (nz = 150 =^=   0.5%) 
                    Xieq    4 x 6 (nz = 12 =^=   0.5%) 
  loo.design2(): ->  Xeq   50 x 7 (nz = 150 =^=  0.43%) 
                    Xieq    5 x 7 (nz = 15 =^=  0.43%) 
  
   Deleting unnecessary knots ...
  loo.design2(): ->  Xeq   50 x 3 (nz = 150 =^=     1%) 
                    Xieq    1 x 3 (nz = 3 =^=     1%) 
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
                    Xieq    2 x 4 (nz = 6 =^=  0.75%) 
  > 
  > c2IC <- cobs(x,y, constraint = c("inc", "concave"), trace = 3)
  qbsks2():
   Performing general knot selection ...
  loo.design2(): ->  Xeq   50 x 3 (nz = 150 =^=     1%) 
                    Xieq    3 x 3 (nz = 9 =^=     1%) 
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
                    Xieq    5 x 4 (nz = 15 =^=  0.75%) 
  loo.design2(): ->  Xeq   50 x 5 (nz = 150 =^=   0.6%) 
                    Xieq    7 x 5 (nz = 21 =^=   0.6%) 
  loo.design2(): ->  Xeq   50 x 6 (nz = 150 =^=   0.5%) 
                    Xieq    9 x 6 (nz = 27 =^=   0.5%) 
  loo.design2(): ->  Xeq   50 x 7 (nz = 150 =^=  0.43%) 
                    Xieq   11 x 7 (nz = 33 =^=  0.43%) 
  
   Deleting unnecessary knots ...
  loo.design2(): ->  Xeq   50 x 3 (nz = 150 =^=     1%) 
                    Xieq    3 x 3 (nz = 9 =^=     1%) 
  > ## here, it's the same as just "i":
  > all.equal(fitted(c2i), fitted(c2IC))
  [1] "Mean relative difference: 0.0808156"
  > 
  > c1   <- cobs(x,y, degree = 1, trace = 3)
  qbsks2():
   Performing general knot selection ...
   l1.design2(): ->  Xeq   50 x 2 (nz = 100 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 5 (nz = 100 =^=   0.4%) 
   l1.design2(): ->  Xeq   50 x 6 (nz = 100 =^=  0.33%) 
  
   Deleting unnecessary knots ...
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 5 (nz = 100 =^=   0.4%) 
  Warning in cobs(x, y, degree = 1, trace = 3) :
    The algorithm has not converged after 100 iterations
  > c1i  <- cobs(x,y, degree = 1, constraint = c("increase"), trace = 3)
  qbsks2():
   Performing general knot selection ...
   l1.design2(): ->  Xeq   50 x 2 (nz = 100 =^=     1%) 
                    Xieq    1 x 2 (nz = 2 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    2 x 3 (nz = 4 =^=  0.67%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    3 x 4 (nz = 6 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 5 (nz = 100 =^=   0.4%) 
                    Xieq    4 x 5 (nz = 8 =^=   0.4%) 
   l1.design2(): ->  Xeq   50 x 6 (nz = 100 =^=  0.33%) 
                    Xieq    5 x 6 (nz = 10 =^=  0.33%) 
  
   Deleting unnecessary knots ...
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    3 x 4 (nz = 6 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    3 x 4 (nz = 6 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    3 x 4 (nz = 6 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 5 (nz = 100 =^=   0.4%) 
                    Xieq    4 x 5 (nz = 8 =^=   0.4%) 
  > c1c  <- cobs(x,y, degree = 1, constraint = c("concave"), trace = 3)
  qbsks2():
   Performing general knot selection ...
   l1.design2(): ->  Xeq   50 x 2 (nz = 100 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    1 x 3 (nz = 3 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    2 x 4 (nz = 6 =^=  0.75%) 
   l1.design2(): ->  Xeq   50 x 5 (nz = 100 =^=   0.4%) 
                    Xieq    3 x 5 (nz = 9 =^=   0.6%) 
   l1.design2(): ->  Xeq   50 x 6 (nz = 100 =^=  0.33%) 
                    Xieq    4 x 6 (nz = 12 =^=   0.5%) 
  
   Deleting unnecessary knots ...
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    1 x 3 (nz = 3 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    1 x 3 (nz = 3 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 2 (nz = 100 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    1 x 3 (nz = 3 =^=     1%) 
  > 
  > plot(c1)
  > lines(predict(c1i), col="forest green")
  > all.equal(fitted(c1), fitted(c1i), tol = 1e-9)# but not 1e-10
  [1] "Mean relative difference: 0.0215671"
  > 
  > ## now gives warning (not error):
  > c1IC <- cobs(x,y, degree = 1, constraint = c("inc", "concave"), trace = 3)
  qbsks2():
   Performing general knot selection ...
   l1.design2(): ->  Xeq   50 x 2 (nz = 100 =^=     1%) 
                    Xieq    1 x 2 (nz = 2 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    3 x 3 (nz = 7 =^=  0.78%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    5 x 4 (nz = 12 =^=   0.6%) 
   l1.design2(): ->  Xeq   50 x 5 (nz = 100 =^=   0.4%) 
                    Xieq    7 x 5 (nz = 17 =^=  0.49%) 
   l1.design2(): ->  Xeq   50 x 6 (nz = 100 =^=  0.33%) 
                    Xieq    9 x 6 (nz = 22 =^=  0.41%) 
  
   Deleting unnecessary knots ...
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    3 x 3 (nz = 7 =^=  0.78%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    3 x 3 (nz = 7 =^=  0.78%) 
   l1.design2(): ->  Xeq   50 x 2 (nz = 100 =^=     1%) 
                    Xieq    1 x 2 (nz = 2 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    3 x 3 (nz = 7 =^=  0.78%) 
  Warning messages:
  1: In l1.design2(x, w, constraint, ptConstr, knots, pw, nrq = n, nl1,  :
    too few knots ==> nk <= 4; could not add constraint 'concave'
  2: In l1.design2(x, w, constraint, ptConstr, knots, pw, nrq = n, nl1,  :
    too few knots ==> nk <= 4; could not add constraint 'concave'
  > 
  > cp2   <- cobs(x,y,                          pointwise = con, trace = 3)
  qbsks2():
   Performing general knot selection ...
  loo.design2(): ->  Xeq   50 x 3 (nz = 150 =^=     1%) 
                    Xieq    2 x 3 (nz = 6 =^=     1%) 
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
                    Xieq    2 x 4 (nz = 6 =^=  0.75%) 
  loo.design2(): ->  Xeq   50 x 5 (nz = 150 =^=   0.6%) 
                    Xieq    2 x 5 (nz = 6 =^=   0.6%) 
  loo.design2(): ->  Xeq   50 x 6 (nz = 150 =^=   0.5%) 
                    Xieq    2 x 6 (nz = 6 =^=   0.5%) 
  loo.design2(): ->  Xeq   50 x 7 (nz = 150 =^=  0.43%) 
                    Xieq    2 x 7 (nz = 6 =^=  0.43%) 
  
   Deleting unnecessary knots ...
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
                    Xieq    2 x 4 (nz = 6 =^=  0.75%) 
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
                    Xieq    2 x 4 (nz = 6 =^=  0.75%) 
  loo.design2(): ->  Xeq   50 x 5 (nz = 150 =^=   0.6%) 
                    Xieq    2 x 5 (nz = 6 =^=   0.6%) 
  > 
  > ## Here, warning ".. 'ifl'.. " on *some* platforms (e.g. Windows 32bit) :
  > r2i <- tryCatch.W.E( cobs(x,y, constraint = "increase", pointwise = con) )
  qbsks2():
   Performing general knot selection ...
  
   Deleting unnecessary knots ...
  > cp2i <- r2i$value
  > ## IGNORE_RDIFF_BEGIN
  > r2i$warning
  NULL
  > ## IGNORE_RDIFF_END
  > ## when plotting it, we see that it gave a trivial constant!!
  > cp2c  <- cobs(x,y, constraint = "concave",  pointwise = con, trace = 3)
  qbsks2():
   Performing general knot selection ...
  loo.design2(): ->  Xeq   50 x 3 (nz = 150 =^=     1%) 
                    Xieq    3 x 3 (nz = 9 =^=     1%) 
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
                    Xieq    4 x 4 (nz = 12 =^=  0.75%) 
  loo.design2(): ->  Xeq   50 x 5 (nz = 150 =^=   0.6%) 
                    Xieq    5 x 5 (nz = 15 =^=   0.6%) 
  loo.design2(): ->  Xeq   50 x 6 (nz = 150 =^=   0.5%) 
                    Xieq    6 x 6 (nz = 18 =^=   0.5%) 
  loo.design2(): ->  Xeq   50 x 7 (nz = 150 =^=  0.43%) 
                    Xieq    7 x 7 (nz = 21 =^=  0.43%) 
  
   Deleting unnecessary knots ...
  loo.design2(): ->  Xeq   50 x 3 (nz = 150 =^=     1%) 
                    Xieq    3 x 3 (nz = 9 =^=     1%) 
  > 
  > ## now gives warning (not error): but no warning on M1 mac -> IGNORE
  > ## IGNORE_RDIFF_BEGIN
  > cp2IC <- cobs(x,y, constraint = c("inc", "concave"), pointwise = con, trace = 3)
  qbsks2():
   Performing general knot selection ...
  loo.design2(): ->  Xeq   50 x 3 (nz = 150 =^=     1%) 
                    Xieq    5 x 3 (nz = 15 =^=     1%) 
  loo.design2(): ->  Xeq   50 x 4 (nz = 150 =^=  0.75%) 
                    Xieq    7 x 4 (nz = 21 =^=  0.75%) 
  loo.design2(): ->  Xeq   50 x 5 (nz = 150 =^=   0.6%) 
                    Xieq    9 x 5 (nz = 27 =^=   0.6%) 
  loo.design2(): ->  Xeq   50 x 6 (nz = 150 =^=   0.5%) 
                    Xieq   11 x 6 (nz = 33 =^=   0.5%) 
  loo.design2(): ->  Xeq   50 x 7 (nz = 150 =^=  0.43%) 
                    Xieq   13 x 7 (nz = 39 =^=  0.43%) 
  
   Deleting unnecessary knots ...
  loo.design2(): ->  Xeq   50 x 3 (nz = 150 =^=     1%) 
                    Xieq    5 x 3 (nz = 15 =^=     1%) 
  Warning message:
  In cobs(x, y, constraint = c("inc", "concave"), pointwise = con,  :
    drqssbc2(): Not all flags are normal (== 1), ifl : 18
  > ## IGNORE_RDIFF_END
  > cp1   <- cobs(x,y, degree = 1,                            pointwise = con, trace = 3)
  qbsks2():
   Performing general knot selection ...
   l1.design2(): ->  Xeq   50 x 2 (nz = 100 =^=     1%) 
                    Xieq    2 x 2 (nz = 4 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    2 x 3 (nz = 4 =^=  0.67%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    2 x 4 (nz = 4 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 5 (nz = 100 =^=   0.4%) 
                    Xieq    2 x 5 (nz = 4 =^=   0.4%) 
   l1.design2(): ->  Xeq   50 x 6 (nz = 100 =^=  0.33%) 
                    Xieq    2 x 6 (nz = 4 =^=  0.33%) 
  
   Deleting unnecessary knots ...
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    2 x 4 (nz = 4 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    2 x 4 (nz = 4 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    2 x 4 (nz = 4 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 5 (nz = 100 =^=   0.4%) 
                    Xieq    2 x 5 (nz = 4 =^=   0.4%) 
  > cp1i  <- cobs(x,y, degree = 1, constraint = "increase",   pointwise = con, trace = 3)
  qbsks2():
   Performing general knot selection ...
   l1.design2(): ->  Xeq   50 x 2 (nz = 100 =^=     1%) 
                    Xieq    3 x 2 (nz = 6 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    4 x 3 (nz = 8 =^=  0.67%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    5 x 4 (nz = 10 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 5 (nz = 100 =^=   0.4%) 
                    Xieq    6 x 5 (nz = 12 =^=   0.4%) 
   l1.design2(): ->  Xeq   50 x 6 (nz = 100 =^=  0.33%) 
                    Xieq    7 x 6 (nz = 14 =^=  0.33%) 
  
   Deleting unnecessary knots ...
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    5 x 4 (nz = 10 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    5 x 4 (nz = 10 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    5 x 4 (nz = 10 =^=   0.5%) 
   l1.design2(): ->  Xeq   50 x 5 (nz = 100 =^=   0.4%) 
                    Xieq    6 x 5 (nz = 12 =^=   0.4%) 
  > cp1c  <- cobs(x,y, degree = 1, constraint = "concave",    pointwise = con, trace = 3)
  qbsks2():
   Performing general knot selection ...
   l1.design2(): ->  Xeq   50 x 2 (nz = 100 =^=     1%) 
                    Xieq    2 x 2 (nz = 4 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    3 x 3 (nz = 7 =^=  0.78%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    4 x 4 (nz = 10 =^=  0.62%) 
   l1.design2(): ->  Xeq   50 x 5 (nz = 100 =^=   0.4%) 
                    Xieq    5 x 5 (nz = 13 =^=  0.52%) 
   l1.design2(): ->  Xeq   50 x 6 (nz = 100 =^=  0.33%) 
                    Xieq    6 x 6 (nz = 16 =^=  0.44%) 
  
   Deleting unnecessary knots ...
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    3 x 3 (nz = 7 =^=  0.78%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    3 x 3 (nz = 7 =^=  0.78%) 
   l1.design2(): ->  Xeq   50 x 2 (nz = 100 =^=     1%) 
                    Xieq    2 x 2 (nz = 4 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    3 x 3 (nz = 7 =^=  0.78%) 
  > 
  > cp1IC <- cobs(x,y, degree = 1, constraint = c("inc", "concave"), pointwise = con, trace = 3)
  qbsks2():
   Performing general knot selection ...
   l1.design2(): ->  Xeq   50 x 2 (nz = 100 =^=     1%) 
                    Xieq    3 x 2 (nz = 6 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    5 x 3 (nz = 11 =^=  0.73%) 
   l1.design2(): ->  Xeq   50 x 4 (nz = 100 =^=   0.5%) 
                    Xieq    7 x 4 (nz = 16 =^=  0.57%) 
   l1.design2(): ->  Xeq   50 x 5 (nz = 100 =^=   0.4%) 
                    Xieq    9 x 5 (nz = 21 =^=  0.47%) 
   l1.design2(): ->  Xeq   50 x 6 (nz = 100 =^=  0.33%) 
                    Xieq   11 x 6 (nz = 26 =^=  0.39%) 
  
   Deleting unnecessary knots ...
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    5 x 3 (nz = 11 =^=  0.73%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    5 x 3 (nz = 11 =^=  0.73%) 
   l1.design2(): ->  Xeq   50 x 2 (nz = 100 =^=     1%) 
                    Xieq    3 x 2 (nz = 6 =^=     1%) 
   l1.design2(): ->  Xeq   50 x 3 (nz = 100 =^=  0.67%) 
                    Xieq    5 x 3 (nz = 11 =^=  0.73%) 
  Warning messages:
  1: In l1.design2(x, w, constraint, ptConstr, knots, pw, nrq = n, nl1,  :
    too few knots ==> nk <= 4; could not add constraint 'concave'
  2: In l1.design2(x, w, constraint, ptConstr, knots, pw, nrq = n, nl1,  :
    too few knots ==> nk <= 4; could not add constraint 'concave'
  > 
  > ## Named list of all cobs() results above -- sort() collation order matters for ls() !
  > (curLC <- Sys.getlocale("LC_COLLATE"))
  [1] "C"
  > Sys.setlocale("LC_COLLATE", "C")
  [1] "C"
  > cobsL <- mget(Filter(\(nm) is.cobs(.GlobalEnv[[nm]]), ls(patt="c[12p]")),
  +               envir = .GlobalEnv)
  > Sys.setlocale("LC_COLLATE", curLC) # reverting
  [1] "C"
  > 
  > knL <- lapply(cobsL, `[[`, "knots")
  > str(knL[order(lengths(knL))])
  List of 16
   $ c2IC : num [1:2] -1 2
   $ cp2IC: num [1:2] -1 2
   $ cp2c : num [1:2] -1 2
   $ c1IC : num [1:3] -1 0.776 2
   $ c1c  : num [1:3] -1 0.776 2
   $ c2   : num [1:3] -1 -0.449 2
   $ c2c  : num [1:3] -1 0.163 2
   $ cp1IC: num [1:3] -1 0.776 2
   $ cp1c : num [1:3] -1 0.776 2
   $ c2i  : num [1:4] -1 0.163 0.776 2
   $ cp2  : num [1:4] -1 -0.449 0.776 2
   $ cp2i : num [1:4] -1 0.163 0.776 2
   $ c1   : num [1:5] -1 -0.449 0.163 0.776 2
   $ c1i  : num [1:5] -1 -0.449 0.163 0.776 2
   $ cp1  : num [1:5] -1 -0.449 0.163 0.776 2
   $ cp1i : num [1:5] -1 -0.449 0.163 0.776 2
  > 
  > gotRsqrs <- sapply(cobsL, Rsq)
  > Rsqrs <- c(c1  = 0.95079126, c1IC = 0.92974549, c1c  = 0.92974549, c1i  = 0.95079126,
  +            c2  = 0.94637437, c2IC = 0.91375404, c2c  = 0.92505977, c2i  = 0.95022829,
  +            cp1 = 0.9426453, cp1IC = 0.92223149, cp1c = 0.92223149, cp1i = 0.9426453,
  +            cp2 = 0.94988863, cp2IC= 0.90051964, cp2c = 0.91375409, cp2i = 0.93611487)
  > ## M1 mac   "  =     "     , cp2IC= 0.91704726,  "   =      "    , cp2i = 0.94620178
  > ## noLD     "  =     "     , cp2IC=-0.08244284,  "   =      "    , cp2i = 0.94636815
  > ## ATLAS    "  =     "     , cp2IC= 0.91471729,  "   =      "    , cp2i = 0.94506339
  > ## openBLAS "  =     "     , cp2IC= 0.91738019,  "   =      "    , cp2i = 0.93589404
  > ## MKL      "  =     "     , cp2IC= 0.91765403,  "   =      "    , cp2i = 0.94501205
  > ## Intel    "  =     "     , cp2IC= 0.91765403,  "   =      "    , cp2i = 0.94501205
  > ##                                  ^^^^^^^^^^                            ^^^^^^^^^^
  > ## remove these two from testing, notably for the M1 Mac & noLD .. :
  > ##iR2 <- if(!x86 || noLdbl) setdiff(names(cobsL), c("cp2IC", "cp2i")) else TRUE
  > ## actually everywhere, because of ATLAS, openBLAS, MKL, Intel... :
  > iR2 <- setdiff(names(cobsL), nR2 <- c("cp2IC", "cp2i"))
  > ## IGNORE_RDIFF_BEGIN
  > dput(signif(gotRsqrs, digits=8))
  c(c1 = 0.95341697, c1IC = 0.92974549, c1c = 0.92974549, c1i = 0.95079126, 
  c2 = 0.94864721, c2IC = 0.91375404, c2c = 0.92505977, c2i = 0.95022829, 
  cp1 = 0.9426453, cp1IC = 0.92223149, cp1c = 0.92223149, cp1i = 0.9426453, 
  cp2 = 0.94988863, cp2IC = 0.90051964, cp2c = 0.91375409, cp2i = 0.93611487
  )
  > all.equal(Rsqrs[iR2], gotRsqrs[iR2], tolerance=0)# 2.6277e-9 (Lnx F 38); 2.6898e-9 (M1 mac)
  [1] "Mean relative difference: 0.000374227"
  > all.equal(Rsqrs[nR2], gotRsqrs[nR2], tolerance=0)# differ; drastically only for 'noLD'
  [1] "Mean relative difference: 2.18514e-09"
  > ## IGNORE_RDIFF_END
  > stopifnot(exprs = {
  +     all.equal(Rsqrs[iR2], gotRsqrs[iR2])
  +     identical(c(5L, 3L, 3L, 5L,
  +                 3L, 2L, 3L, 4L,
  +                 5L, 3L, 3L, 5L,
  +                 4L, 2L, 2L, 4L), unname(lengths(knL)))
  + })
  Error: Rsqrs[iR2] and gotRsqrs[iR2] are not equal:
    Mean relative difference: 0.000374227
  Execution halted